1. Запускаю файл *.cmd, в котором cscript LoadUnisender.js
2. LoadUnisender.js:

var Connector = new ActiveXObject('TSDskObjectLibrary.DskConnector');
var fso = new ActiveXObject('Scripting.FileSystemObject');
var xml = new ActiveXObject('TSObjectLibrary.XMLStorage');
var EmptyValue = new ActiveXObject('TSObjectLibrary.Value');
var fst = new Array('tbl_PVCRelease', 'tbl_PVCRequest');
...

При запуске файла cmd появляется ошибка:
c:\Program Files\3.4.0.49\Bin\LoadMailClient.js(1, 1) Ошибка выполнения Microsof
t JScript: Невозможно создание объекта сервером программирования объектов

Как исправить?

Нравится

15 комментариев

А где вы взяли эти скрипты?

Здравствуйте,
Попробуйте использовать jsc вместо cscript

Как это сделать описано в статье
How to: Compile JScript Code from the Command Line
http://msdn.microsoft.com/en-us/library/7435xtz6(v=vs.80).aspx

To start the compiler from a Windows command prompt, you must run the application from within its directory or type the fully qualified path to the executable at the command prompt. To override this default behavior, you must modify the PATH environment variable, which enables you to run the compiler from any directory by simply typing the compiler name.
 
To modify the PATH Environment Variable
 
Use the Windows Search feature to find jsc.exe on your local drive. The exact name of the directory where jsc.exe is located depends on the name and location of the Windows directory and the version of the .NET Framework installed. If you have more than one version of the .NET Framework installed, you must determine which version to use (typically the latest version).
 
For example, the compiler may be located in C:\WINNT\Microsoft.NET\Framework\v1.0.2914.
 
Right-click the My Computer icon on your Desktop (Windows 2000), and select Properties from the shortcut menu.
 
Select the Advanced tab and click the Environment Variables button.
 
In the System variables pane, select "Path" from the list and click Edit.
 
In the Edit System Variable dialog box, move the cursor to the end of the string in the Variable Value field and type a semicolon (;) followed by the full directory name found in Step 1.
 
Continuing with the example in Step 1, you would type:
 
;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
 
Click OK to confirm your edits and close the dialog boxes.
 
After you change the PATH environment variable, you can run the JScript compiler at the Windows command prompt from any directory on the machine.

После чего вызывать компилятор через

jsc filename.js

У меня строки:

var Connector = new ActiveXObject('TSDskObjectLibrary.DskConnector');
print("1");
var fso = new ActiveXObject('Scripting.FileSystemObject');
print("2");
var xml = new ActiveXObject('TSObjectLibrary.XMLStorage');
print("3");
var EmptyValue = new ActiveXObject('TSObjectLibrary.Value');
print("4");
var fst = new Array('tbl_PVCRelease', 'tbl_PVCRequest');

Ошибки не вызвали, когда я компилировал через jsc

В версии 3.4.0 нет библиотеки TSDskObjectLibrary.dll.
Объект DskConnector перенесен в библиотеку TSWindowLibrary.dll. Поэтому для подключения необходимо использовать

var Connector = new ActiveXObject('TSWindowLibrary.DskConnector');

"Евгений Либин" написал:

А где вы взяли эти скрипты?

Да, это Ваши :)

"Агутин Алексей" написал:

В версии 3.4.0 нет библиотеки TSDskObjectLibrary.dll.

Объект DskConnector перенесен в библиотеку TSWindowLibrary.dll. Поэтому для подключения необходимо использовать

var Connector = new ActiveXObject('TSWindowLibrary.DskConnector');


Не помогло

На сколько я помню вопрос решился еще в пятницу :).
Достаточно было запустить ...Program Files\Terrasoft\Redist\ScriptControl_2003.exe

"Евгений Либин" написал:

На сколько я помню вопрос решился еще в пятницу :).

Достаточно было запустить ...Program Files\Terrasoft\Redist\ScriptControl_2003.exe


У вас то получилось :) А я использую эти строки для своего модуля, он на версии 3.4.0.49.

всмысле?

Анна, проверил на бинарных файлах 3.4.0.79, конфигурация CRM 3.4.0.79, код ниже, XML сервисов прикрепляю

//-----------------------------------------------------------------------------
// wnd_tstActiveXScript
//-----------------------------------------------------------------------------
 
 
function btnOKOnClick(Control) {
var Connector = new ActiveXObject('TSDskObjectLibrary.DskConnector');
var fso = new ActiveXObject('Scripting.FileSystemObject');
var xml = new ActiveXObject('TSObjectLibrary.XMLStorage');
var EmptyValue = new ActiveXObject('TSObjectLibrary.Value');
var fst = new Array('tbl_PVCRelease', 'tbl_PVCRequest');
}
 
function Main() {
	var Window = Services.GetNewItemByUSI('wnd_tstActiveX');
	Window.IsDesigning = false;	
	Window.Prepare();
	Window.Show();	
}

По нажатию кнопки "Ок" никаких ошибок не возникло.
Предлагаю вам подгрузить сервисы, и проверить, не возникает ли у вас ошибок

Это возможно, только если Вы на компьютере уже использовали бинарники до версии 3.4.0. В таком случае библиотека остается зарегистрированной в системе. Если на компьютере устанавливалась только верси 3.4.0 - этой библиотеки (TSDskObjectLibrary) нет.

Скажите, а есть где-то описание изменений в объектах в 3.4?

"Анна Проненко" написал:
Агутин Алексей пишет:

В версии 3.4.0 нет библиотеки TSDskObjectLibrary.dll.

Объект DskConnector перенесен в библиотеку TSWindowLibrary.dll. Поэтому для подключения необходимо использовать

var Connector = new ActiveXObject('TSWindowLibrary.DskConnector');

Не помогло

Странно, должно было помочь. Скорее всего у Вас на момент запуска скрипта не были зарегистрированы библиотеки версии 3.4.0.
Вы запускали до этого Terrasoft 3.4.0 на этой машине?

"Евгений Либин" написал:

Скажите, а есть где-то описание изменений в объектах в 3.4?

Полная версия SDK по 3.4.0 находится в разработке
Основные изменения описал в прикрепленном документе.

Спасибо, Сергей.

Это нужный документ.
Ждем полную версию SDK.
Но хотелось бы еще получить информацию не только по бинарникам, но и по конфигурации, например, раньше для добавления раздела нужно было модифицировать форму wnd_Main и его скрипт. В 3.4 теперь всё это делается на уровне справочников и настроек.
Было бы интересно получить информацию такого плана (желательно подробную :) )

"Евгений Либин" написал:
Но хотелось бы еще получить информацию не только по бинарникам, но и по конфигурации, например, раньше для добавления раздела нужно было модифицировать форму wnd_Main и его скрипт. В 3.4 теперь всё это делается на уровне справочников и настроек.

Было бы интересно получить информацию такого плана (желательно подробную :) )

Первый пункт в поиске:
http://www.community.terrasoft.ua/search/node/3.4.0

И еще:
http://www.community.terrasoft.ru/usr/versions/usrversions3-4-0

Позже планируем предоставить более расширенную информацию для разработчиков по поводу работы с нововведениями в версии 3.4.0

Показать все комментарии

Предлагаю вашему вниманию функцию для рекурсивного поиска файлов в заданном каталоге по маске. На днях потребовалось решить такую задачу для автоматизированного внесения ссылок на деталь "Файлы". Предлагаемая функция как раз и осуществляет указанный поиск. Возможно также видоизменить её для поиска по размеру файла.

function Main() {
//Пример запуска
        var FileSystem = new ActiveXObject('Scripting.FileSystemObject');
        try {
                var Drive = FileSystem.Drives.Item('D');
        } catch (e){
                Log.Write(1, 'Диск не найден');
                return
        }
        var RegExpMask = /.*\.avi/igm;//--файлы с расширением .avi
        var Folder = Drive.RootFolder;//Можно использовать метод GetFolder('имя папки') для подпапок
        SearchFile(Folder, RegExpMask);
}
 
function SearchFile(Folder, RegExpMask){
//Рекурсивная функция поиска файлов по маске
        //поиск файлов в папке Folder
        var FilesEnumerator = new Enumerator(Folder.Files);
        while (!FilesEnumerator.atEnd()){
                var File = FilesEnumerator.item();
                var FileName = File.Name;//имя файла
                var FilePath = File.Path;//полный путь к файлу
                var FileSize = File.Size;//размер файла
                RegExpMask.compile(RegExpMask);
                var FileByMask = RegExpMask.exec(FileName);
                System.ProcessMessages();//--здесь можно двигать бегунок
                if (FileByMask){
                        Log.Write(1, FilePath);//здесь можно выполнять любые действия с найденным файлом                       
                }
                FilesEnumerator.moveNext();
        }
        //поиск в подпапках
        var SubFoldersEnumerator = new Enumerator(Folder.SubFolders);    
        while (!SubFoldersEnumerator.atEnd()){
                var Folder = SubFoldersEnumerator.item();              
                System.ProcessMessages();//--здесь можно двигать бегунок
                //Log.Write(1, Folder.Path);//--здесь можно выполнять любые действия с найденной папкой
                SearchFile(Folder, RegExpMask);
                SubFoldersEnumerator.moveNext();
        }
}

Нравится

Поделиться

0 комментариев
Показать все комментарии