cJSON: Предложения по развитию проекта

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Основной тред
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Предложения по развитию проекта

Сообщение Игорь Столяров »

ДД !

Здесь я буду записывать предложения, которые возникают у меня при работе с классом cJSON.
Возможно у Вас когда-нибудь появится желание что-то из написанного переименовать и сделать ... ;)

1. Полноценное управление выгрузкой тега в зависимости от его содержимого.
Можно считать это обобщением существующих опций: EmptyString / IgnoreFalse / IgnoreZero

Код: Выделить всё

  {"Name":"Print","IsBool":true,"IgnoreValue":true}
  {"Name":"Font", "IgnoreValue":11}
  
!  "Name":"*" - здесь в принципе не нужен
2. Хоть какой-то механизм управления самими опциями.
Написание текстовых блоков OPTION в формате JSON - это красивая академическая идея для примеров.
Например, управление и поддержка вот таких настроек выгрузки одного из вариантов самого обычного кассового чека -
это попа полная (и там ещё 12 вложенных списков потом подключается со своими тегами): :(

Код: Выделить всё

Atol:J_Items      Equate('{{"Name":"barcodeType","JsonName":"barcodeType"},' & |
                         '{{"Name":"pictureNumber","JsonName":"pictureNumber"},' & |                          
                         '{{"Name":"infoDiscountAmount","JsonName":"infoDiscountAmount"},' & | 
                         '{{"Name":"measurementUnit","JsonName":"measurementUnit"},' & | 
                         '{{"Name":"paymentMethod","JsonName":"paymentMethod"},' & | 
                         '{{"Name":"paymentObject","JsonName":"paymentObject"},' & | 
                         '{{"Name":"nomenclatureCode","JsonName":"nomenclatureCode"},' & | 
                         '{{"Name":"additionalAttribute","JsonName":"additionalAttribute"},' & |
                         '{{"Name":"exciseSum","JsonName":"exciseSum"},' & | 
                         '{{"Name":"countryCode","JsonName":"countryCode"},' & | 
                         '{{"Name":"customsDeclaration","JsonName":"customsDeclaration"},' & | 
                         '{{"Name":"userParam3","JsonName":"userParam3"},' & | 
                         '{{"Name":"userParam4","JsonName":"userParam4"},' & | 
                         '{{"Name":"userParam5","JsonName":"userParam5"},' & | 
                         '{{"Name":"userParam6","JsonName":"userParam6"},' & |
                         '{{"Name":"markingCode","JsonName":"markingCode"},' & | ! GROUP / QUEUE
                         '{{"Name":"imcParams","JsonName":"imcParams"},' & |
                         '{{"Name":"agentInfo","JsonName":"agentInfo"},' & |
                         '{{"Name":"supplierInfo","JsonName":"supplierInfo"},' & |
                         '{{"Name":"productCodes","JsonName":"productCodes"},' & |
                         '{{"Name":"industryInfo","JsonName":"industryInfo"},' & |
                         '{{"Name":"customParameters","JsonName":"customParameters"},' & |
                         '{{"Name":"doubleWidth","JsonName":"doubleWidth","IsBool":true,"IgnoreFalse":true},'        & |
                         '{{"Name":"doubleHeight","JsonName":"doubleHeight","IsBool":true,"IgnoreFalse":true},'      & |
                         '{{"Name":"printText","JsonName":"printText","IsBool":true,"IgnoreFalse":true},'            & |
                         '{{"Name":"piece","JsonName":"piece","IsBool":true,"IgnoreFalse":true},'                    & |
                         '{{"Name":"additionalAttributePrint","JsonName":"additionalAttributePrint","IsBool":true},' & | 
                         '{{"Name":"print","JsonName":"print","IsBool":true},'                   & | 
                         '{{"Name":"storeInJournal","JsonName":"storeInJournal","IsBool":true},' & | ! для Default: true
                         '{{"Name":"imcType","JsonName":"imcType"},'  & |
                         '{{"Name":"itemEstimatedStatus","JsonName":"itemEstimatedStatus"},'  & |
                         '{{"Name":"imcModeProcessing","JsonName":"imcModeProcessing","IgnoreZero":false},'  & |
                         '{{"Name":"itemFractionalAmount","JsonName":"itemFractionalAmount"},'  & |
                         '{{"Name":"imcBarcode","JsonName":"imcBarcode"},'      & |
                         '{{"Name":"itemQuantity","JsonName":"itemQuantity"},'  & |                                
                         '{{"Name":"itemUnits","JsonName":"itemUnits"},'        & |
                         '{{"Name":"itemInfoCheckResult","JsonName":"itemInfoCheckResult"},' & |
                         '{{"Name":"imcCheckFlag","JsonName":"imcCheckFlag","IsBool":true,"IgnoreFalse":true},'           & |
                         '{{"Name":"imcCheckResult","JsonName":"imcCheckResult","IsBool":true,"IgnoreFalse":true},'       & | 
                         '{{"Name":"imcStatusInfo","JsonName":"imcStatusInfo","IsBool":true,"IgnoreFalse":true},'         & |
                         '{{"Name":"imcEstimatedStatusCorrect","JsonName":"imcEstimatedStatusCorrect","IsBool":true,"IgnoreFalse":true},' & |
                         '{{"Name":"ecrStandAloneFlag","JsonName":"ecrStandAloneFlag","IsBool":true,"IgnoreFalse":true},' & |
                         '{{"Name":"payingAgent","JsonName":"payingAgent"},' & |
                         '{{"Name":"receivePaymentsOperator","JsonName":"receivePaymentsOperator"},' & |                          
                         '{{"Name":"moneyTransferOperator","JsonName":"moneyTransferOperator"},'     & |                          
                         '{{"Name":"agentsPrint","JsonName":"agentsPrint","IsBool":true},' & |   ! для Default: true
                         '{{"Name":"agentDataPrint","JsonName":"agentDataPrint","IsBool":true},' & |
                         '{{"Name":"supplierPrint","JsonName":"supplierPrint","IsBool":true},' & |  ! для Default: true
                         '{{"Name":"supplierVatinPrint","JsonName":"supplierVatinPrint","IsBool":true},' & |
                         '{{"Name":"industryAttribute","JsonName":"industryAttribute"},' & |
                         | ! + добавляется на этапе выполнения
        '{{"Name":"taxes","JsonName":"taxes"},'                        & | 
        '{{"Name":"industryInfo","JsonName":"industryInfo"},'          & |        
        '{{"Name":"customParameters","JsonName":"customParameters"},'  & |         
        '{{"Name":"salesNotice","JsonName":"salesNotice"},'            & |         
        '{{"Name":"clientInfo","JsonName":"clientInfo"},'              & |
        '{{"Name":"companyInfo","JsonName":"companyInfo"},'            & |
        '{{"Name":"agentInfo","JsonName":"agentInfo"},'                & |
        '{{"Name":"supplierInfo","JsonName":"supplierInfo"},'          & |
        '{{"Name":"operationInfo","JsonName":"operationInfo"},'        & |        
        '{{"Name":"taxationType","JsonName":"taxationType"},'          & |
        '{{"Name":"paymentsPlace","JsonName":"paymentsPlace"},'        & |
        '{{"Name":"paymentsAddress","JsonName":"paymentsAddress"},'    & |
        '{{"Name":"machineNumber","JsonName":"machineNumber"},'        & |        
        '{{"Name":"electronically","IsBool":true,"IgnoreFalse":true},' & |
        '{{"Name":"ignoreNonFiscalPrintErrors","JsonName":"ignoreNonFiscalPrintErrors","IsBool":true,"IgnoreFalse":true},' & |
        '{{"Name":"validateMarkingCodes","JsonName":"validateMarkingCodes","IsBool":true,"IgnoreFalse":true},' & |                         
                         '{{"Name":"preItems","JsonName":"preItems","instance":'    & Instance(Self.qPreItems, Thread()) & '},' & |
                         '{{"Name":"postItems","JsonName":"postItems","instance":'  & Instance(Self.qPostItems,Thread()) & '},' & |
                         '{{"Name":"items","JsonName":"items","instance":'          & Instance(qItems,         Thread()) & '},' & |
                         '{{"Name":"payments","JsonName":"payments","instance":'    & Instance(qPayments,      Thread()) & '}')
Учитывая сложившийся в нашем общении принцип отрицания всего - я предложу самый простой вариант
(как идею для рассмотрения):

Код: Выделить всё

  Self.OptClear('Набор1')
  Self.OptSet('Набор1')
  Self.OptAdd('"Name":"industryAttribute","JsonName":"industryAttribute"')
  Self.OptAdd('"Name":"payingAgent","JsonName":"payingAgent"')
  
  Self.OptClear('Набор2')
  Self.OptSet('Набор2')  
  Self.OptAdd('"Name":"userParam3","JsonName":"userParam3,"IsBool":true"')
  
  Object.ToGroup(gResponse,,'Набор1')  ! Первые два символа не '[{{'
  Json.ToGroup(JsonStr,NameObject,GroupResponse,'Набор2')
  
  Self.OptFree()  
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5226
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

cJSON: Предложения по развитию проекта

Сообщение finsoftrz »

Не знаю, будет ли полезно. Всякие установки для структур group и queue можно передавать через атрибут name. По моему, у Брюса Джонсона такое видел. Получается что-то наподобии пользовательских опций словаря. Выглядит неплохой идеей, чтобы разделять данные и код.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Предложения по развитию проекта

Сообщение Игорь Столяров »

finsoftrz писал(а): 19 Сентябрь 2024, 8:07 По моему, у Брюса Джонсона
Видимо Брюс Джонс тоже демонстрировал свои идеи на концептуальных академических примерах.
Потому что в Clarion ограничение длины имени переменной - 100 символов. Любым способом.

Ну и плюс сюда же технологическое ограничение Clarion с потерей регистра имени полей функцией WHO().
Этого не увидел даже тот "Джонс" который справку Clarion делал и проверял ... ;)
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5226
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

cJSON: Предложения по развитию проекта

Сообщение finsoftrz »

Я просто привёл идею для размышлений. Никто не запрещает, например, вводить именованные наборы правил и т.п. Главный смысл в отделении данных от кода, насколько возможно, что, очевидно, упрощает контроль и поддержку проекта. Смотрите сами. Я использую cjson довольно мало, хватает базового функционала. Если потребуется больше, то оберну в свой класс.
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Предложения по развитию проекта

Сообщение Дед Пахом »

"Учитывая тот факт" (c) что опции в формате json, можно манипулировать не большой строкой опций, а json объектом. Для примера:

Код: Выделить всё

OptionsTest              PROCEDURE()
jOptions                        &cJSON, AUTO
  MAP
    AddFieldOptions(cJSON pjOptions, STRING pFieldName, STRING pRawJsonOptions)
  END
  CODE
  !- создаём массив опций
  jOptions &= json::CreateArray()

  !- добавляем опции для каждого поля (без фигурных скобок)
  jOptions.AddFieldOptions('barcodeType', '"JsonName":"barcodeType"')
  jOptions.AddFieldOptions('pictureNumber', '"JsonName":"pictureNumber"')
  jOptions.AddFieldOptions('infoDiscountAmount', '"JsonName":"infoDiscountAmount"')
  !...
  jOptions.AddFieldOptions('validateMarkingCodes', '"JsonName":"validateMarkingCodes","IsBool":true,"IgnoreFalse":true')
  jOptions.AddFieldOptions('preItems', '"JsonName":"preItems","instance":'& Instance(Self.qPreItems, Thread()))

  !- передаём в json::CreateObject или json::CreateArray:
  jObject &= json::CreateObject(gCountry,,jOptions.ToString())

  !- чистим
  jOptions.Delete()

AddFieldOptions               PROCEDURE(cJSON pjOptions, STRING pFieldName, STRING pRawJsonOptions)
  CODE
  pjOptions.AddItemToArray(json::CreateRaw(printf('{{"Name":"%s", %s}', pFieldName, pRawJsonOptions)))
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Предложения по развитию проекта

Сообщение Игорь Столяров »

Спасибо ! Но здесь нужно сразу ответить на главный вопрос:
Пример позволяет упростить работу или демонстрирует возможности Clarion по использованию методов с одинаковыми именами ?
Я склоняюсь ко второму варианту. ;)
Make Clarion Great Again ! 😎
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 5226
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 12 раз
Поблагодарили: 63 раза

cJSON: Предложения по развитию проекта

Сообщение finsoftrz »

Игорь Столяров писал(а): 20 Сентябрь 2024, 13:54 Спасибо ! Но здесь нужно сразу ответить на главный вопрос:
Пример позволяет упростить работу или демонстрирует возможности Clarion по использованию методов с одинаковыми именами ?
Я склоняюсь ко второму варианту. ;)
Точно, Игорь, Вы нас раскусили. Стили придумали лентяи! :lol:
C6/C12, ШВС, tps/btrieve.
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Предложения по развитию проекта

Сообщение Дед Пахом »

Игорь Столяров писал(а): 20 Сентябрь 2024, 13:54 Спасибо ! Но здесь нужно сразу ответить на главный вопрос:
Пример позволяет упростить работу или демонстрирует возможности Clarion по использованию методов с одинаковыми именами ?
Я склоняюсь ко второму варианту. ;)
Честно говоря, не понял вопроса. Пример демонстрирует альтернативный метод использования опций.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Предложения по развитию проекта

Сообщение Игорь Столяров »

finsoftrz писал(а): 20 Сентябрь 2024, 16:01 Стили придумали
Здесь немного иное ... но всё равно спасибо. :)
Make Clarion Great Again ! 😎
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Предложения по развитию проекта

Сообщение Игорь Столяров »

Дед Пахом писал(а): 20 Сентябрь 2024, 16:21 Пример демонстрирует альтернативный метод использования опций.
Да ! Некий интерфес создания опций. Только он не упрощает работу с опциями. ;)
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Предложения по развитию проекта

Сообщение Дед Пахом »

А ваш пример упрощает? Смею заметить, что оба примера практически идентичны, только ваш умозрительный, а мой готов к использованию.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8016
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 94 раза

cJSON: Предложения по развитию проекта

Сообщение Игорь Столяров »

.
Последний раз редактировалось Игорь Столяров 22 Сентябрь 2024, 7:01, всего редактировалось 1 раз.
Make Clarion Great Again ! 😎
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3284
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 48 раз
Контактная информация:

cJSON: Предложения по развитию проекта

Сообщение Дед Пахом »

К сожалению, уже на первой странице тема ожидаемо превратилась в мешанину не связанных между собой вопросов.
С уважением, ДП
Ответить