How TODO in Terrasoft CRM 3.0
Содержание
1. Вызов окна из скрипта самого окна 1
2. Логирование сообщений 1
2.1. Вывод сообщений в лог 1
2.2. Вывод активного действия в лог 1
3. Создание соединения с системой 2
3.1. Создание соединения для конкретного пользователя 2
3.2. Соединение с вызовом формы логина 3
4. Импорт данных в Excel из Terrasoft CRM 3.0 4
5. Создание COM объекта и вызов COM объекта из скрипта 5
6. Экспорт данных из Terrasoft CRM 3.0 в Excel 5
7. Динамическое создание сервисов 6
8. Обновление грида детали раздела 6
9. Экспорт данных из Excel в Terrasoft CRM 3.0 7
1.Вызов окна из скрипта самого окна
Для вызова окна необходимо добавить в текст скрипта следующую функцию Main в которой указать имя требуемого окна, после чего нажать F9:
function Main() {
var Window = Services.GetNewItemByUSI('wnd_TestWindow');
Window.IsDesigning = false;
Window.Prepare();
Window.Show();
}
2.Логирование сообщений
2.1.Вывод сообщений в лог
Для вывода сообщений в лог системы можно воспользоваться методом объекта Log.Write(). Для использования констант необходимо в скрипт включить модуль scr_SysEnums
function Main() {
Log.Write(lmtInformation, 'Information Text');
Log.Write(lmtWarning, 'Warning Text');
Log.Write(lmtError, 'Error Text');
}
2.2.Вывод активного действия в лог
Вывод сообщений можно эффективно дополнить функцией вывода активного сообщения. Активное сообщение позволяет не только вывести информацию, но и произвести соответсвующее действие пользователем. Для этого необходимо воспользоваться методом объекта Log.WriteAction(). Например, следующее действие открывает дизайнер сервиса Select Query 'sq_Opportunity':
function Main() {
Log.Write(lmtError, 'Error In Service sq_Opportunity');
Log.WriteAction('Edit', 'Edit sq_Opportunity',
'function Main() {' +
' Designers = Core.DesignerCore.Designers;' +
' Designers.DesignServiceByUSI("sq_Opportunity", "", false);' +
'}');
}
Данный метод можно активно использовать для создания интуитивно понятных сообщений, наподобие таких: 'Если вы хотите отредактировать сервис sq_Opportunity нажмите на «Редактировать», если хотите удалить, нажмите на «Удалить», хотите создать новый, нажмите «Создать»'.
3.Создание соединения с системой
3.1.Создание соединения для конкретного пользователя
Для создания соединения необходимо создать объект "TSObjectLibrary.Connector" и вызвать его метод OpenConfiguration:
function OpenConfiguration(const Configuration: IConfiguration;
const UserName: WideString; const UserPassword: WideString): WordBool;
Пример создания соединения из Excel:
Sub Macro1()
Dim Connector
Dim Configuration
Dim Window
Set Connector = CreateObject("TSObjectLibrary.Connector")
Set Configuration = Connector.Configurations.ItemsByName("TSCRM")
If (Not Connector.OpenConfiguration(Configuration, "Supervisor", "")) Then
Exit Sub
End If
Set Window = Connector.Services.GetNewItemByUSI("wnd_TestWindow")
Window.WindowCaption = "Test Caption"
Window.Prepare
Window.ShowModal
End Sub
Для вызова из Delphi:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TSObjectLibrary_TLB, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
TSWindowLibrary_TLB, ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
//Value: OleVariant;
Connector: IConnector;
Configuration: IConfiguration;
Service: IService;
Window: IWindow;
begin
{Value := CreateOleObject('TSObjectLibrary.Connector');
if (not Supports(Value, IConnector, Connector)) then
begin
Exit;
end;}
Connector := CoConnector.Create();
Configuration := Connector.Configurations.ItemsByName['TSCRM'];
if (not Connector.OpenConfiguration(Configuration, 'Supervisor', '')) then
begin
Exit;
end;
Service := Connector.Services.GetNewItemByUSI('wnd_Customer');
if (not Supports(Service, IWindow, Window)) then
begin
Exit;
end;
Window.Prepare();
Window.ShowModal();
end;
end.
3.2.Соединение с вызовом формы логина
Для создания соединения с вызовом формы логина необходимо создать объект "TSDskObjectLibrary.DskConnector" и вызвать его метод Login:
function Login(const ApplicationName: WideString): WordBool;
Пример создания соединения с вызовом формы из Excel:
Sub Macro1()
Dim Connector
Dim Window
Set Connector = CreateObject("TSDskObjectLibrary.DskConnector")
If (Not Connector.Login("Test Application")) Then
Exit Sub
End If
Set Window = Connector.Services.GetNewItemByUSI("wnd_TestWindow")
Window.WindowCaption = "Test Caption"
Window.Prepare
Window.ShowModal
End Sub
Для Delphi:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, TSObjectLibrary_TLB, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
TSWindowLibrary_TLB, TSDskObjectLibrary_TLB, ComObj;
procedure TForm1.Button1Click(Sender: TObject);
var
Connector: IDskConnector;
Configuration: IConfiguration;
Service: IService;
Window: IWindow;
begin
Connector := CoDskConnector.Create();
if (not Connector.Login()) then
begin
Exit;
end;
Service := Connector.Services.GetNewItemByUSI('wnd_Customer');
if (not Supports(Service, IWindow, Window)) then
begin
Exit;
end;
Window.Prepare();
Window.ShowModal();
end;
end.
4.Импорт данных в Excel из Terrasoft CRM 3.0
Sub ImportContacts()
Dim Connector
Dim Configuration
Set Connector = CreateObject("TSObjectLibrary.Connector")
Set Configuration = Connector.Configurations.ItemsByName("TSCRM")
If (Not Connector.OpenConfiguration(Configuration, "Supervisor", "")) Then
Exit Sub
End If
Dim Dataset
Set Dataset = Connector.Services.GetNewItemByUSI("ds_Contact")
Dim Sheet As Worksheet
Dataset.Open
Set Sheet = ActiveSheet
i = 2
Sheet.Cells(1, 1) = "Name"
Sheet.Cells(1, 2) = "Address"
While Not Dataset.IsEOF
Sheet.Cells(i, 1) = Dataset.ValAsStr("Name")
Sheet.Cells(i, 2) = Dataset.ValAsStr("Address")
Dataset.GotoNext
i = i + 1
Wend
Dataset.Close
End Sub
5.Создание COM объекта и вызов COM объекта из скрипта
1) Для создания COM объекта необходимо в Delphi создать проект (меню File New Other… Закладка ActiveX ActiveX Library ) и сохранить его с именем «TestComObject».
2) В проект добавляем объект автоматизации (меню File New Other… Закладка ActiveX ActiveX Library Automation Object), вводим CoClassName «Test».
3) В редакторе библиотеки типа в интерфейсе ITest добавляем метод «MsgBox» с параметром Name = Message, Type = WideString.
Добавляем в раздел implementation модуль Dialogs:
implementation
uses ComServ, Dialogs;
А в тело метода MsgBox добавляем вызов функции ShowMessage:
procedure TTest.MsgBox(const Message: WideString);
begin
ShowMessage(Message);
end;
Сохраняем модуль объекта в файле Test.pas
4) Регистрируем библиотеку (меню Run Register ActiveX Server).
5) Для вызова COM объекта необходимо создать произвольный сервис скрипта и добавить в текст скрипта следующую функцию Main, после чего нажать F9:
function Main() {
var TestObject = System.CreateObject('TestComObject.Test');
TestObject.MsgBox('Test Message');
}
6.Экспорт данных из Terrasoft CRM 3.0 в Excel
Для экспорта данных в Excel необходимо создать ActiveXObject с именем 'Excel.Application', затем создать Excel-книгу (Workbook) и вывести данные в соответствующие столбцы:
function btnExportToExcelOnClick(Control) {
var ExcelApplication = new ActiveXObject('Excel.Application');
var WorkBook = ExcelApplication.WorkBooks.Add();
var Sheet = WorkBook.ActiveSheet;
var Dataset = dlCustomer.Dataset;
Dataset.DisableEvents();
try {
for (var i = 0; i < Dataset.Datafields.Count; i++) {
var Datafield = Dataset.Datafields.Items(i);
Sheet.Cells(1, i + 1) = Datafield.Name;
}
var i = 2;
var IDField = Dataset.Datafields.ItemsByName('ID');
var NameField = Dataset.Datafields.ItemsByName('Name');
var AddressField = Dataset.Datafields.ItemsByName('Address');
var BalanceField = Dataset.Datafields.ItemsByName('Balance');
Dataset.GotoFirst();
while (!Dataset.IsEOF) {
Sheet.Cells(i, 1) = IDField.Value;
Sheet.Cells(i, 2) = NameField.Value;
Sheet.Cells(i, 3) = AddressField.Value;
Sheet.Cells(i, 4) = BalanceField.Value;
Dataset.GotoNext();
i = i + 1;
}
} finally {
Dataset.EnableEvents();
}
Sheet.Cells.Select();
Sheet.Cells.EntireColumn.AutoFit();
Sheet.Range('A2').Select();
ExcelApplication.Visible = true;
}
7.Динамическое создание сервисов
Для экспорта данных в Excel необходимо создать ActiveXObject с именем 'Excel.Application', затем создать Excel-книгу (Workbook) и вывести данные в соответствующие столбцы:
function btnExportToExcelOnClick(Control) {
.. TODO
8.Обновление грида детали раздела
Пример: необходимо после создания задачи для указанного проекта обновить делать «задачи проекта».
Для обновление грида детали раздела необходимо изменить в скрипте карточки задачи scr_TaskEdit метод btnOKOnClick() (вставленный код выделенный жирным шрифтом) и добавить в скрипт дополнительный модуль (Inclusions Script) scr_DB:
function btnOKOnClick(Control) {
var Dataset = dlData.Dataset;
var IsFinished = GetTaskStatusIsFinishByID(Dataset.Values('StatusID'));
var WorkflowItemID = Dataset.Values('WorkflowItemID');
var MadeByWorkflow = (WorkflowItemID != null);
if (IsFinished && MadeByWorkflow) {
Dataset.DataFields('ResultID').IsRequired = true;
} else {
Dataset.DataFields('ResultID').IsRequired = false;
}
if (!CheckTaskData(Dataset)) {
return;
}
CreateRemindings();
TaskEdit.IsCompleting = true;
try {
var ResultFlag = scr_BaseDBEdit.btnOKOnClick(Control);
}
finally {
TaskEdit.IsCompleting = false;
}
if (Self.IsVisible) {
return;
}
var MainWindow = Connector.Attributes('MainWindow');
var wndWorkspace = MainWindow.ComponentsByName('wndWorkspace');
var WorkspaceWindow = wndWorkspace.Window;
var WorkspaceWindowUSICode = System.ExtractUSICode(WorkspaceWindow.USI);
if (WorkspaceWindowUSICode == 'wnd_OpportunitiesWorkspace')
{
var wndTasksDetail = WorkspaceWindow.ComponentsByName('wndTasksDetail');
var TasksDetailWindow = wndTasksDetail.Window;
var DatasetLink = TasksDetailWindow.ComponentsByName('dlData');
RefreshDataset(DatasetLink.Dataset);
}
var WorkflowItemID = Dataset.ValAsStr('WorkflowItemID');
if ((!TaskEdit.StatusChanged) || (!IsFinished) ||
(IsEmptyGUID(WorkflowItemID))) {
return;
}
var WorkflowEngine = GetAttribute(Connector, 'WorkflowEngine');
if (Assigned(WorkflowEngine)) {
WorkflowEngine.ProcessWorkflowItem(WorkflowItemID);
}
}
9.Экспорт данных из Excel в Terrasoft CRM 3.0
Sub ExportToTSCRM()
Dim Connector
Dim Configuration
Set Connector = CreateObject("TSObjectLibrary.Connector")
Set Configuration = Connector.Configurations.ItemsByName("TSCRM")
If (Not Connector.OpenConfiguration(Configuration, "Supervisor", "")) Then
Exit Sub
End If
Dim Dataset
Set Dataset = Connector.Services.GetNewItemByUSI("ds_Contact")
Dim Sheet As Worksheet
Dataset.Open
Set Sheet = ActiveSheet
Dim MaxRange As Range
Set MaxRange = Selection.End(xlDown)
For Row = 2 To MaxRange.Row
Dataset.Append
Dataset.ValAsStr("ID") = Connector.GenGUID
Dataset.ValAsStr("Name") = Sheet.Cells(Row, 1)
Dataset.ValAsStr("Address") = Sheet.Cells(Row, 2)
Dataset.Post
Next Row
Dataset.Close
End Sub
Исходная таблица данных в Excel
|
A
|
B
|
1
|
Name
|
Address
|
2
|
Contact1
|
Address1
|
3
|
Contact2
|
Address2
|
4
|
Contact3
|
Address3
|
5
|
Contact4
|
Address4
|
6
|
Contact5
|
Address5
|
7
|
Contact6
|
Address6
|
8
|
Contact7
|
Address7
|
9
|
Contact8
|
Address8
|
10
|
Contact9
|
Address9
|
11
|
Contact10
|
Address10
|
|