Еще один пример - документооборот в портале. Активизируется автоматически, если есть доступ к документообороту. Ключевые классы: EPDocumentWeblet, EPSendDocument. Ключевая форма: EPDocuInfoEdit.
При этом код может быть примерно такой:
PHP код:
public void setControl()
{
WebSession webSession = WebSession();
COMVariant vars = new COMVariant();
BinData binData;
SysInetASPUploadIUploadedFile fileitem = null;
SysInetASPUploadUploadManager um;
FileName filename;
FilePath filePath;
int i;
DocuRef docuRef;
DocuActionFile docuActionFile;
str endSlash(str _str)
{
return (strScan(_str, '\\',strLen(_str),-1)) ? _str : _str + '\\';
}
if (! webSession.getParm(webControlName))
return;
um = WebSession().aspUpload();
if (! um)
return;
try
{
ttsbegin;
for (i = 1; i <= um.Files().Count(); i++)
{
binData = new BinData();
vars.int(i);
fileitem = um.Files().Item( vars );
if (! fileitem)
continue;
filename = fileItem.FileName();
if (! fileDocuType)
{
fileDocuType = DocuType::find(ProblemWebParameters::find().FieleDocuTypeId);
}
if (! fileDocuType)
throw error("@SYS22620");
if (! filePath)
{
filePath = fileDocuType.ArchivePath ? fileDocuType.ArchivePath : DocuParameters::find().ArchivePath;
}
if (! filePath)
{
filePath = xInfo::directory(DirectoryType::Temp);
}
filePath = endSlash(filePath);
binData.setVariant(fileitem.binary());
if (! WinAPI::fileExists(filePath + fileName))
{
filename = filePath + fileName;
}
else
{
do
{
filename = WinAPI::getTempFilename(filePath, "Att");
filename = subStr(filename, 1, strFind(filename, '.', strLen(filename), -255) - 1) + '.' +
conpeek(Docu::splitFilename(fileitem.FileName()), 2);
}
while (WinAPI::fileExists(filename));
}
if (! binData.saveFile(filename))
throw error("@SYS69639" + ": " + WinAPI::formatMessage(WinAPI::getLastError()));
docuActionFile = fileDocuType.docuAction();
docuRef.clear();
docuRef.initValue();
docuRef.Name = fileitem.FileName();
docuRef.TypeId = fileDocuType.TypeId;
docuRef.RefCompanyId = curExt();
docuRef.Restriction = DocuRestriction::Internal;
docuRef.insert();
docuActionFile.insertDocuValue(docuRef, filename);
if (fileDocuType.filePlace == DocuFilePlace:://Database)
{
WinAPI::deleteFile(filename);
}
docuRefList.ins(docuRef);
}
ttscommit;
}
catch (Exception::Error)
{
this.abortSave();
}
}