запросить cfscript правильно в coldfusion?

ПОЯСНЕНИЕ. Вопрос в том, "как мне прекратить использовать <cfquery> для извлечения данных и заменить его вызовом API?"

У меня есть запрос sql, где мне нужна помощь, чтобы преобразовать его в cfscript. Однако, как вы можете видеть, я попытался преобразовать его. Но мне нужна некоторая проверка, если я на правильном пути для преобразования из sql-запроса в cfscript. если нет, может ли кто-нибудь помочь мне, преобразовав запрос sql в cfscript? Спасибо за помощь. вот мой код.

СЦЕНАРИЙ:

<cfset jsonDatas = fileRead("c:\Users\Desktop\MyApi.json" )>      
<cfset jsonData = deserializeJSON(jsonDatas) />       
<cfif arrayLen(jsonData)>  
  <cfloop array="#jsonData#" index="prop">       
    <cfoutput>  
      <cfscript>  
        // writedump(jsonData);for (item in jsonData[1])   {  
          if (#prop.payGrade# == 0) {
                 #prop.divisionNbr#;        
         #prop.probationBeginDate#;        
         #prop.legacyStatus#;        
         #prop.payStep#;        
         #prop.creationDate#;           
          } 

person jonathon myers    schedule 22.05.2020    source источник
comment
Я думаю, вам нужно уточнить вопрос. Содержит ли файл JSON результаты вашего запроса? Чего вы действительно пытаетесь достичь? Некоторые изменения в вопросе должны сделать его более понятным.   -  person rrk    schedule 22.05.2020
comment
Прости за это. Да, мой файл json содержит результаты моего запроса. Я просто не хочу использовать представление запроса и хочу получить данные из URL-адреса API/файла? Итак, я начал преобразовывать все, что делал мой sql-запрос внутри cfscript.   -  person jonathon myers    schedule 22.05.2020
comment
Поскольку приведенный выше пример не является «запускаемым» — и мы не можем получить доступ к вашей базе данных или файлам json — я уверен, вы понимаете, как кому-то другому было бы трудно понять, в чем проблема :-) Итак.. , что происходит, когда вы запускаете код? Чем результат отличается от того, что вы ожидали? См. советы: Как задать хороший вопрос.   -  person SOS    schedule 22.05.2020
comment
Если хотите, я могу опубликовать свой полный файл json? Кроме того, результат показывает вывод отсюда: <br>Output:, но я хочу посмотреть, правильно ли я конвертирую запрос sql в cfscript.   -  person jonathon myers    schedule 22.05.2020
comment
Вы все время говорите конвертировать из sql-запроса в cfscript, но... мы не знаем точно, что вы имеете в виду под этим :-) Я предполагаю, что данные API находятся в другом формате, или, может быть, имеет разные имена столбцов, и вы пытаетесь преобразовать JSON в запрос с теми же столбцами? Если да, то я бы спросил, почему? то есть что вы в конечном итоге делаете с json, потому что возможно, что запрос не нужен. Попробуйте собрать небольшой автономный пример, который мы можем выполнить. (Очевидно, что сначала нужно очистить данные!)   -  person SOS    schedule 22.05.2020
comment
Итак, что я имею в виду под преобразованием из sql в cfscript. Является ли преобразование всего, что делает оператор sql, в cfscript, имеет ли это смысл сейчас? Как я пытаюсь сделать прямо сейчас в моем приведенном выше коде   -  person jonathon myers    schedule 23.05.2020
comment
@jonathonmyers Я обновил ваш вопрос на основе ваших комментариев.   -  person Adrian J. Moreno    schedule 24.05.2020
comment
Так что не так с кодом, который у вас есть?   -  person SOS    schedule 26.05.2020
comment
Я больше не хочу использовать представление запроса, но вместо этого использую вызов API/url.   -  person jonathon myers    schedule 26.05.2020


Ответы (3)


Я собираюсь пойти ва-банк здесь. У вас есть данные в БД, и вы просто хотите вернуть их представление JSON? Как в

<cfquery name="result">
    SELECT ...
    FROM whereever
</cfquery>

<cfoutput>#SerializeJSON(result, 'struct')#</cfoutput>

А потом что-то еще пытается потреблять эти данные? Я искал ваши вопросы, и я не знаю, находимся ли мы на стороне мира, генерирующей данные, или на стороне мира, потребляющей данные.

person James A Mohler    schedule 22.05.2020
comment
Нет.. Я думаю, что неправильно объясняю. Итак, я пытаюсь больше не использовать cfquery, а использовать вызов api/url. Итак, например, все, что я делаю в операторе sql, переводится в cfhttp/cfscript, но больше не используйте оператор sql или cfquery. - person jonathon myers; 23.05.2020
comment
Так это все обработка на стороне клиента? Например, у вас есть код, загруженный в браузер, и браузеру необходимо получать данные из API. Но мы же не про создание API говорим, а про создание кода браузера? - person James A Mohler; 23.05.2020
comment
да, в основном больше не получаю результат от sql(view). просто сделайте ту же логику, используя вместо этого api/url, преобразовав cfquery в cfscript/cfhttp - person jonathon myers; 24.05.2020

Вы спрашиваете о двух разных вещах.

  • SQL определяет выполнение запроса к базе данных.
  • CFSCRIPT — это просто синтаксис стиля сценария для кода ColdFusion (в отличие от тегов).

Ваш пример кода

  • Вот немного SQL
  • Здесь я читаю JSON и преобразовываю его в структуру ColdFusion, используя код в стиле скрипта вместо тегов.

Вы пытаетесь перейти от текущего вызова базы данных, которая возвращает данные в виде объекта запроса ColdFusion, к вызову API, который возвращает данные в виде пакета JSON? Затем вам нужно преобразовать данные JSON в те же или аналогичные структуры CF, которые вы используете в настоящее время?

ОБНОВЛЕНИЕ. Если вы хотите заменить существующий запрос вызовом API,

  • API уже существует?
  • Возвращает ли он те же данные, что и текущий запрос?
  • Ваша команда переходит на API, чтобы отделить существующий код?
  • Вам нужно знать, КАК преобразовать вызов <cfquery> в вызов API?
person Adrian J. Moreno    schedule 22.05.2020
comment
Я думаю, что я не правильно объясняю. Итак, я пытаюсь больше не использовать cfquery, а использовать вызов api/url. Итак, например, все, что я делаю в операторе sql, переводится в cfhttp/cfscript, но больше не используйте оператор sql или cfquery. - person jonathon myers; 23.05.2020
comment
И откуда API будет брать данные? - person James A Mohler; 24.05.2020

Это действительно комментарий, но мне нужно много места, чтобы написать его.

Вы хотите получить данные из удаленного источника и отобразить их на веб-странице. Вы хотите сделать что-то подобное?

введите здесь описание изображения

Я думаю, нам нужно уточнить, какие технологии являются клиентскими, а какие серверными.

Обновление на основе комментариев**

Рассмотрим решение VueJS

<!-- Showing stuff on screen -->
<div id="app">
  {{ info }}
</div>

Я могу показать что-то на экране. Это похоже, но не идентично #info#

<!-- Getting data -->
<cfscript>
new Vue({
  el: '#app',
  data () {
    return {
      info: null
    }
  },
  mounted () {
    axios
      .get('https://api.coindesk.com/v1/bpi/currentprice.json')
      .then(response => (this.info = response))
  }
})
<cfscript>

И это получение данных из удаленного источника и помещение этих данных в переменную javascript.

Пояснение

Так почему же я делаю это с помощью Javascript, а не ColdFusion? Javascript работает в браузере; ColdFusion работает на сервере. Если вы хотите использовать API в браузере, вы должны использовать технологии на основе браузера.

Мой пример — на VueJS, но Angular и React — тоже варианты. Это немного устарело, но jQuery тоже может делать такие вещи.

Источник кода: https://vuejs.org/v2/cookbook/using-axios-to-consume-apis.html

person James A Mohler    schedule 24.05.2020
comment
Я расширил свой ответ. Надеюсь, поможет - person James A Mohler; 25.05.2020
comment
вы используете VueJS? если да, но я не использую VueJS. Я просто хочу получить некоторые рекомендации по моему коду выше, если это хороший способ преобразовать представление запроса sql в вызов API, выполнив то же самое, что я делаю в представлении запроса. - person jonathon myers; 27.05.2020
comment
Итак, у вас есть веб-страница, которая вызывает API. Веб-страница должна принимать данные JSON, которые она проходит через нее. Он должен делать такие вещи, как <cfoutput query="mydata"> . Технологии для этого очень разные. Взгляните на: stackoverflow.com/questions/51963481/ Это, вероятно, то, что вы хотите сделать в отношении итерации. - person James A Mohler; 27.05.2020
comment
Джеймс, но я не хочу использовать vue. Посмотрите на мой cfscript и посмотрите, делаю ли я то же самое, что и в cfquery? это хороший подход? - person jonathon myers; 27.05.2020
comment
Я не рекомендую Vue как таковой. Я говорю, что это проблема Javascript, а не проблема ColdFusion. Данные обрабатываются в браузере. Это отличается от обработки на веб-сервере и доставки в браузер. - person James A Mohler; 27.05.2020
comment
Ok. Но делает ли cfscript то же самое, что и cfquery? - person jonathon myers; 27.05.2020
comment
Игнорируя тот факт, что переменные массива не совпадают с переменными запроса, они выглядят одинаково. - person James A Mohler; 27.05.2020
comment
Позвольте мне ответить на это так. Есть (по крайней мере) два способа узнать, что это правильно. 1. Если вы используете такой инструмент, как Postman, и вы инициируете извлечение данных, и он может извлекать и анализировать данные, как ожидалось. 2. Когда ваша веб-страница извлекает данные, она может это делать, анализировать данные и выводить их на экран. Вы узнаете, что это правильно, когда это можно будет проверить и показать, что это правильно. - person James A Mohler; 28.05.2020