Не вопрос. Бум писать имена в нижнем регистре (или с учётом pNamesInLowerCase) и всё.
Это особенность которую просто нужно знать, т.к. регистр имён в строке Options не имеет значения.
Скорость выгрузки данных с большими Options для RuleHelper (опять) реально выросла в разы !
И насколько приятней вместо вот этого вот всего (где нужно выверить каждый знак в строке !):
Код: Выделить всё
Root &= json::CreateObject(gPack,,'[' & |
'{{"name":"*","EmptyString":"ignore","IgnoreZero":true,"IgnoreEmptyObject":true,"IgnoreEmptyArray":true},' & |
'{{"name":"SCod", "FormatLeft":"@p<##-#####-#####-#p"},' & |
'{{"name":"Provodka", "IsBool":true},' & |
'{{"name":"FlagBack", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagNDS", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagOplata", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagSale", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagSF", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagStorno", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagUsluga", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagService","IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagOpl", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagCost", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagDocF", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagClose", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagAkziz", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagNoStamp","IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagNoSeal", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagNoNDS", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagNoPhone","IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"FlagUrgent", "IsBool":true,"IgnoreFalse":true},' & |
'{{"name":"Shet", "instance":' & Instance(qShet, Thread()) & '},' & |
'{{"name":"TrNakl", "instance":' & Instance(qTrNakl, Thread()) & '},' & |
'{{"name":"Travel", "instance":' & Instance(qTravel, Thread()) & '},' & |
'{{"name":"Bank", "instance":' & Instance(qBank, Thread()) & '},' & |
'{{"name":"Kass", "instance":' & Instance(qKass, Thread()) & '},' & |
'{{"name":"History", "instance":' & Instance(qHistory, Thread()) & '},' & |
'{{"name":"Fall", "instance":' & Instance(qFall, Thread()) & '},' & |
'{{"name":"Plat", "instance":' & Instance(qPlat, Thread()) & '},' & |
'{{"name":"Client", "instance":' & Instance(qJClient, Thread()) & '},' & |
'{{"name":"Tovar", "instance":' & Instance(qJTovar, Thread()) & '},' & |
'{{"name":"Project", "instance":' & Instance(qJProject, Thread()) & '},' & |
'{{"name":"Liza", "instance":' & Instance(qJLiza, Thread()) & '},' & |
'{{"name":"Otdel", "instance":' & Instance(qJOtdel, Thread()) & '},' & |
'{{"name":"Spisok", "IsQueue":true},' & |
'{{"name":"Exemp", "IsQueue":true},' & |
'{{"name":"SList", "IsQueue":true},' & |
'{{"name":"TrItem", "IsQueue":true},' & |
'{{"name":"Sborka", "IsQueue":true},' & |
'{{"name":"Content", "IsQueue":true},' & |
'{{"name":"AddBank", "IsQueue":true}]')
Работать с нормально транслируемым аналогом:
Код: Выделить всё
Root &= json::CreateObject(gPack,,'[{{"name":"*","RuleHelper":"' & Address(rh) & '"}]')
...
rh.FindCB Procedure(String fldName, *typCJsonFieldRule rule)
Code
rule.EmptyString = 'ignore'
rule.IgnoreZero = True
rule.IgnoreEmptyObject = True
rule.IgnoreEmptyArray = True
If Sub(fldName,1,4) = 'flag'
rule.IsBool = True
rule.IgnoreFalse = True
elsIf fldName = 'scod' then rule.FormatLeft = '@p<##-#####-#####-#p'
elsIf fldName = 'provodka' then rule.IsBool = True
elsIf fldName = 'shet' then rule.instance = Instance(qShet, Thread())
elsIf fldName = 'trnakl' then rule.instance = Instance(qTrNakl, Thread())
elsIf fldName = 'travel' then rule.instance = Instance(qTravel, Thread())
elsIf fldName = 'bank' then rule.instance = Instance(qBank, Thread())
elsIf fldName = 'kass' then rule.instance = Instance(qKass, Thread())
elsIf fldName = 'history' then rule.instance = Instance(qHistory, Thread())
elsIf fldName = 'fall' then rule.instance = Instance(qFall, Thread())
elsIf fldName = 'plat' then rule.instance = Instance(qPlat, Thread())
elsIf fldName = 'client' then rule.instance = Instance(qJClient, Thread())
elsIf fldName = 'tovar' then rule.instance = Instance(qJTovar, Thread())
elsIf fldName = 'project' then rule.instance = Instance(qJProject, Thread())
elsIf fldName = 'liza' then rule.instance = Instance(qJLiza, Thread())
elsIf fldName = 'otdel' then rule.instance = Instance(qJOtdel, Thread())
elsIf fldName = 'spisok' then rule.IsQueue = True
elsIf fldName = 'exemp' then rule.IsQueue = True
elsIf fldName = 'slist' then rule.IsQueue = True
elsIf fldName = 'tritem' then rule.IsQueue = True
elsIf fldName = 'sborka' then rule.IsQueue = True
elsIf fldName = 'content' then rule.IsQueue = True
elsIf fldName = 'addbank' then rule.IsQueue = True.
И это я ещё пока не использовал все возможности фильтрации имён в обычном коде ...
Минус (особенность) пока только один: нельзя использовать метод rh.FindCB внутри Routine, и как следствие -
нужно выносить класс и все описания используемых в нём структур данных в общее описание процедуры.
Но это приятные хлопоты.
