Есть функциональность - берутся данные из одного модуля и импортируются в другой, с учетом определенных условий + небольшие преобразования. Какие-то данные не попадают в импорт. Задача - вывести после импорта информацию о данных, которые не импортировавились - при этом определены 3 условия, при котором данные не будут испортироваться. Т.е. "достать" эти данные - не проблема. Но в каком виде и как их можно подать пользователю? В MessageBox информацию о 200 (например) контрактах (даже если выводить только Title) не запихнуть...
Нравится
функции OpenFileWithFullAccess и WriteMessageToFile Вам помогут
можете посмотреть как это реализовано, например, в контексте интеграции из экселя:
scr_DataflowUtils
[javascript]
function ImportDataByImportObject(...) {
...
WriteMessageToFile(...);
ImportObject.Imported = true;
} finally {
...
}
[/javascript]
scr_DataflowExcelUtils
[javascript]
function ExecuteImportFromExcel(...) {
if (Assigned(DataflowUtils.ImportLogFile)){
if (ShowConfirmationDialog(msgDoYouWantLookImportLog) == wmrYes){
OpenFileWithFullAccess(LogFileName, true);
}
DataflowUtils.ImportLogFile.Close();
DataflowUtils.ImportLogFile = null;
}
...
}
[/javascript]
Спасибо. С созданием и показом содержимого файла разобралась. Код :
[javascript]
DatasetPrice.Open();
if (IsDatasetEmpty(DatasetPrice)) {
DatasetPrice.Close();
return;
}
DatasetPrice.GotoFirst();
var Message = '';
var LogFileName = GetCustomLogFileName('BillingInfo');
var FileSystemObject = GetFileSystemObject();
var InfoLogFile = FileSystemObject.CreateTextFile(LogFileName, true, true);
while (!DatasetPrice.IsEOF)
{
Message = DatasetPrice.Values('ContractTitle');
InfoLogFile.WriteLine(Message);
DatasetPrice.GotoNext();
}
OpenFileWithFullAccess(LogFileName);
[/javascript]
SaveToFile - вроде бы метод для объектов террасофт, а не для текста, и он (в вариациях) не позволяет дозаписывать
Надо еще определиться, что пользователь будет делать с этой информацией. Например, если он ее просто скопирует - возможно лучше не создавать файл. а вывести окно с MemoControl.
Если вам удобно сначала собрать инфо, а потом записывать - ваш вариант то, что нужно. Если удобнее дописывать в файл - используйте .WriteLine (http://msdn.microsoft.com/en-us/library/t5399c99(v=vs.84).aspx) и в конце закрывайте файл.
Опять-таки, пользователь не увидит закрытый файл - его надо открыть System.OpenFile(FileName, fatReadWrite) (http://terrasoft.ru/sdk/IScriptUtils__OpenFile@[in]_BSTR@[in]_FileAcces…)
"Андросов Дмитрий" написал:а ну вы и сами уже)
Да, спасибо. Я потому и удалила предыдущий вопрос
Еще вопрос. А как здесь можно указать конкретное место для сохранения файла? Например на диске С?
[javascript]
function GetCustomLogFileName(LogName) {
CreateFolder(Connector.LogsDirectory);
return Connector.LogsDirectory + LogName+ '_' +
DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '') + '.log';
}
[/javascript]
При попытке изменить эту функцию на
[javascript]
function GetLogFileName(LogName) {
return 'C:\\' + LogName+ '_' +
DateToStr(new Date(System.Now()), '') + '_' +TimeToStr(new Date(System.Now()), '') + '.log';
}
[/javascript]
вылетаю с ошибкой Invalid procedure call or argument
корневая папка диска С считается системной - мб у вас не хватает прав или включен UAC. Так-то вроде все норм
Наталия, протестировала код, отрабатывает корректно. Попробуйте проверить права, как порекомендовал Дмитрий.
это старый баг подсветки и больше ничего - работает как должно
Ну вот и тем не менее - не работало. Хотя и не ругалось. Я тестировала выводом на экран через MessageBox - выдало пустоту.