Всем привет!
Может кому-то немного поможет следующее при использовании ABC и FILE,DRIVER:
В APP, где объявляются файлы, объявляешь процедуру с именем, например, SetNullFileField(STRING FileLabel)
В файле ABFILE.TPW каталога TEMPLATE, ищешь #GROUP(%FileManagerVirtuals, %TreeText, %DataText, %CodeText), и в нее пишешь следующий код:
Код: Выделить всё
#GROUP(%FileManagerVirtuals, %TreeText, %DataText, %CodeText)
#EMBED(%FileManagerDataSection,'File Manager Data Section'),%File,%pClassMethod,%pClassMethodPrototype,PREPARE(,%FixClassName(%FixBaseClassToUse('FileManager:' & %File))),TREE(%TreeText & %DataText)
#?CODE
#!
#! вставка для обработки MSSQL null полей
#!
#! begin
#IF(%pClassMethod='PrimeAutoInc' OR %pClassMethod='TryPrimeAutoInc' OR %pClassMethod='Update' OR %pClassMethod='TryUpdate' OR %pClassMethod='Insert' OR %pClassMethod='TryInsert')
#FOR(%Procedure)
#IF(%Procedure='SetNullFileField')
SetNullFileField('%File')
#BREAK
#ENDIF
#ENDFOR
#ENDIF
#! end
#!
#EMBED(%FileManagerCodeSection,'File Manager Executable Code Section'),%File,%pClassMethod,%pClassMethodPrototype,PREPARE(,%FixClassName(%FixBaseClassToUse('FileManager:' & %File))),TREE(%TreeText & %CodeText)
#!
#!
В процедуре SetNullFileField(STRING FileLabel) примерно следующий
код:
Код: Выделить всё
case clip(FileLabel)
of 'MyFile'
if MyFiled=0 then setnull(MyFiled).
end
Получается удобно:
1) все редактируется в одном месте
2) при добавлении, удалении файлов опять же не надо лазить по глобальным embed
3) эту процедуру можно использовать во всей программе, где есть ручная обработка файлов, главное в нее передавать метку файла как строку
4) Если в APP нет процедуры с именем SetNullFileField, то и генериться код не будет, и другие проекты не пострадают