Да.
Но если при HOWMANY = 1 применить к полю Maximum(Field,1), то мы сможем однозначно отличить поле от Dim(1) ...
Или я не прав ?
Модератор: Дед Пахом
Да.
А проверить эту Вашу теорию не пробовали?Игорь Столяров писал(а): ↑24 Декабрь 2022, 11:51 Но если при HOWMANY = 1 применить к полю Maximum(Field,1), то мы сможем однозначно отличить поле от Dim(1) ...
Где? Надо пробовать прямо в cjson.clw, где-нибудь рядом с вызовом HOWMANY.
Код: Выделить всё
DocClass.MyTest Procedure()
Root &cJson
rh Class(TCJsonRuleHelper)
FindCB Procedure(String pFldName, *typCJsonFieldRule pRule), DERIVED
end
gPacket Group
!FileInBase64 CString(File:MaxFileName) ! Так работает
FileInBase64 Any ! А ВОТ ТАК НЕ РАБОТАЕТ !!!
end
Code
gPacket.FileInBase64 = 'c:\shet.docx'
Root &= json::CreateObject(gPacket,,'[{{"name":"*","RuleHelper":"' & Address(rh) & '"}]')
If Not (Root &= Null)
json::SaveFile('R:\Test.json',Root.ToUtf8())
Root.Delete()
end
rh.FindCB Procedure(String pFldName, *typCJsonFieldRule pRule)
Code
pRule.EmptyString = 'ignore'
pRule.IgnoreZero = True
pRule.IgnoreEmptyObject = True
pRule.IgnoreEmptyArray = True
If Sub(pFldName,1,12) = 'fileinbase64' ! В поле имя файла для записи его содержимого в тег Base64
pRule.IsFile = True
pRule.IsBase64 = True
end
Спасибо ... Неожиданное, но решение.
Код: Выделить всё
jPerson.ToQueue(Persons,, |
printf( '' |
& '[' |
& ' {{"name":"*","rulehelper":%i},' |
& ' {{"name":"Photo01","auto":true},' |
& ' {{"name":"Photo02","auto":true}', |
... И ТАК ВРУЧНУЮ ДУБЛИРУЕМ ДЛЯ КАЖДОГО ТЕГА
& ' {{"name":"Photo10","auto":true}' |
& ']', ADDRESS(rh)))
rh.AutoCB PROCEDURE(STRING pFldName, cJSON pItem)
CODE
IF pFldName = 'PHOTO01'
Persons.Photo01 = printf('%w', pItem.GetStringValue())
END
IF pFldName = 'PHOTO02'
Persons.Photo02 = printf('%w', pItem.GetStringValue())
END
.... И ТАК ВРУЧНУЮ ДУБЛИРУЕМ ДЛЯ КАЖДОГО ТЕГА
IF pFldName = 'PHOTO10'
Persons.Photo10 = printf('%w', pItem.GetStringValue())
END
Да, спасибо. Мы именно так и делаем (если тип поля не ANY).
Игорь Столяров писал(а): ↑29 Декабрь 2022, 23:09 & ' {{"name":"Photo01","auto":true},' |
& ' {{"name":"Photo02","auto":true}', |
... И ТАК ВРУЧНУЮ ДУБЛИРУЕМ ДЛЯ КАЖДОГО ТЕГА
& ' {{"name":"Photo10","auto":true}' |
Спасибо ! Но как сегодня выяснилось, что поля c типом ANY проклятые в FindCB() и я не могу
Код: Выделить всё
Root.ToGroup(gPacket,,'[{{"name":"*","RuleHelper":"' & Address(rh) & '"}]')
rh.FindCB Procedure(String pFldName, *typCJsonFieldRule pRule)
Code
...
If Sub(pFldName,1,5) = 'photo' ! Поле ANY для загрузки содержания тега из Base64
pRule.IsBase64 = True
end