6. Экспорт данных из Terrasoft CRM 3.0 в Excel

advertisement
How TODO in Terrasoft CRM 3.0
Содержание
Вызов окна из скрипта самого окна ............................................................................................. 1
Логирование сообщений ............................................................................................................... 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
1.
2.
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
1
2
3
4
5
6
7
8
9
10
11
A
Name
Contact1
Contact2
Contact3
Contact4
Contact5
Contact6
Contact7
Contact8
Contact9
Contact10
B
Address
Address1
Address2
Address3
Address4
Address5
Address6
Address7
Address8
Address9
Address10
Related documents
Download