?

Log in

No account? Create an account
Виктор Милитарев: почему они нас так ненавидят?
siebel_crm_rus
Оригинал взят у alades в Виктор Милитарев: почему они нас так ненавидят?

Вот уже несколько месяцев меня сильно беспокоит один и тот же вопрос. По какой причине те, кому не нравится что «Крым наш» так сильно нервничают? Я бы даже сказал, не просто нервничают, а психуют. Выражаясь архаическим языком, безумствуют.


Ведь можно же быть категорически недовольным присоединением Крыма и вообще всей украинской политикой Путина, но выражать свое недовольство в корректной форме. Как это делает мой старый приятель Глеб Павловский. Он считает, что риски от ухудшения отношений с Западом сильно превышают выгоды от воссоединения Крыма. Он также считает, что излишне сильное вовлечение в украинскую проблематику негативно сказывается на репутации Владимира Путина, который начинает выглядеть, проводя такую политику, не президентом России, а кандидатом в президенты Украины.


Позиция Павловского представляется мне не просто абсолютно корректной, но и абсолютно законной. Из того, что большинство русских активно поддержали воссоединение Крыма, никак не следует, что его обязаны поддерживать все русские. К любому политическому действию возможна оппозиция.


Конечно, Глеб Олегович не до конца выдерживает описанную выше позицию. То он точно знает, что именно Янукович дал приказ на стрельбу на Майдане, то ему известно, кто именно сбил малазийский самолет и т. д. Но на фоне всех остальных недовольных присоединением Крыма, позиция Глеба заслуживает, на мой взгляд, глубочайшего уважения.

Продолжение...Collapse )






Террор в ЖЖ Лев Вершинин putnik1
siebel_crm_rus
Оригинал взят у mikle1 в Террор в ЖЖ Лев Вершинин putnik1
Еще раз напоминаю - администрация ЖЖ трепетно относится ко всем, кто позволяет себе освещать события на остатках территории бывшей Украины.Заморжен журнал Льва Вершиниа . Со вчерашнего дня его материалы под именем размещаются в журнале da_dzi.

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

Я прекрасно понимаю, почему на американских ресурсах беспощадно уничтожают всё, что может повредить засевшим в Киеве бандеровцам. Именно поэтому ролики 500 секунд правды об Украине и Русская Окраина убирают повсеместно под благовидными предлогами.

Основная борьба на руинах Украины идет именно в информационном поле. Именно поэтому мне, как и многим другим, нужна помощь и поддержка людей. Каждый делает, что может. А вместе мы можем многое. Практически - всё. Рейтинг блогов



WorkFlow. Полезные мелочи
siebel_crm_rus

Системные переменные в QUERY и NEXTRECORD-операциях на нодах воркфлова

NumAffRows - число выбранных строк

NoMoreRecords - истина или ложь в зависимости от того все записи пробежали или ещё нет

А вот так выглядит условие:

NumAffRows==0 записей нет

NumAffRows!=0 и NoMoreRecords==false  - нужно бежать обрабатывать следующую запись

В противном случае - все записи обработаны (NoMoreRecords==true)


Создаём собственные отчёты в Excel
siebel_crm_rus

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

Пример серверного скрипта для работы с экселем (только если сибель установлен под виндой)

var ExcelIns = COMCreateObject("Excel.Application");
ExcelIns.Visible = true;
ExcelIns.WorkBooks.Add();
var masRows:Array=this.BusComp().GetFieldValue("Identificator").split("\n");
var masColls:Array;
for(var i=0;i<masRows.length;i++){
masColls=masRows[i].split(";");
for(var j=0;j<masColls.length;j++)
ExcelIns.ActiveSheet.Cells(i+1,j+1).Value = masColls[j];
masColls=null;
}

masRows=null;
//ExcelIns.Application.Quit();
ExcelIns=null;

Пример браузерного скрипта для работы с экселем.

При использовании браузерного скрпита аплета следует помнить, что в нём доступны только те поля БК, которые вынесены на сам аплет (плюс пять обязательных полей).

Также следует помнить, что из браузерного скрипта аплета можно вызывать сначала браузерный, а потом одноимённый серверный скрипты БС (а из серверного скрипта аплета только серверный скрипт БС)

Итак, у нас на бк есть длинное поле типа DTYPE_NOTE и размером 16 383 (в базе оно имеет тип long). Мы заполняем это поле в серверном скрипте (или где-то ещё). В этом поле хранится отчёт, который должен быть показан в экселе.

в бразуерном скрипте аплета по нажатию кнопки мы показываем отчёт путём вызова метода из БС и передачи ему значения из нашего длинного поля

var svc = TheApplication().GetService("CommonUtilsBS");
var inputPropSet = TheApplication().NewPropertySet();
inputPropSet.SetProperty("ReportString", this.BusComp().GetFieldValue("Identificator"));
svc.InvokeMethod("ShowReport", inputPropSet);
inputPropSet=null; svc=null

вот код этого БС


if (methodName=="ShowReport"){
//TheApplication().SWEAlert("la-la-la1");
var txt=inputPropSet.GetProperty("ReportString");
var ExcelIns = new ActiveXObject("Excel.Application");
ExcelIns.Visible = true;
ExcelIns.WorkBooks.Add();
var masRows=txt.split("\n");
//var masColls;
var i;
for(i=0;i<masRows.length;i++){
masColls=masRows[i].split(";");
for(var j=0;j<masColls.length;j++)
ExcelIns.ActiveSheet.Cells(i+1,j+1).Value = masColls[j];
masColls=null;
}
masRows=null;
//ExcelIns.Application.Quit();
ExcelIns=null;
txt=null;
return ("CancelOperation");
}


Передача данных из серверного скрипта аплета в браузерный скрипт другого аплета. Всплывающие (popup)
siebel_crm_rus

Всплывающие (popup) аплеты

http://siebelunleashed.com/how-popup-applet-through-escript/
http://siebelunleashed.com/how-to-invoke-popup-applet-on-button-click/
http://siebelmantra.blogspot.ru/2013/08/how-to-display-popup-applet-in-siebel.html

Примечание: всплывающий аплет обязательно должен быть настроен на БК принадлежащий тому же БО, что и представление с которого он запускается. То есть всё как обычно. Работа ведётся в пределах одного БО. Всплывающий аплет должен быть основан на определённом классе. Например на CSSFramePopup

Передавать данные из серверного скрипата в браузерный скрипт другого аплета на самом деле оказывается просто. И делается это следующим образом

Пусть в серверном скрипте одного аплета у нас есть строковая переменная var TextData:chars=""; (а запихнуть в неё можно охренительно большие массивы символов).

В серверном скрипте первого аплета мы записываем нашу текстовую переменную в создаваемый пользовательский атрибут

TheApplication().SetProfileAttr("TextData", TextData);

Потом вызываем (в том же серверном скрипте) всплывающий аплет:

var oServiceAF = TheApplication().GetService("SLM Save List Service");
var inputPropAF = TheApplication().NewPropertySet();
var outputPropAF = TheApplication().NewPropertySet();
inputPropAF.SetProperty("Applet Name","FINS Accounts List Applet Report");
inputPropAF.SetProperty("Applet Mode","2"); //у нас form-аплет имеющй шабоны типа base и edit
inputPropAF.SetProperty("Applet Height", "700");
inputPropAF.SetProperty("Applet Width", "700");
oServiceAF.InvokeMethod("LoadPopupApplet", inputPropAF, outputPropAF);
outputPropAF=null;inputPropAF=null;oServiceAF=null;

И уже в бразуерном скрипте всплывающего аплета выполняем следующую работу:

var ctrl = this.FindControl("area");
ctrl.SetValue(TheApplication().GetProfileAttr("TextData"));
TheApplication().SetProfileAttr("TextData","");

где area это текстовое поле типа TextArea.

Чисто теоретически в бразуерном скрипте всплывающего аплета мы могли бы создать Excel COM-объект и на основе одной или более входящих строк сформировать читаемый отчёт в любом угодном нам виде.


Использование на шине сибелёвского адаптера настроенного на БК не явл глав комп внутри БО
siebel_crm_rus

Если мы сибелёвским адаптером обращаемся(обновляем/создаём/редактируем и т.д.) к главному БК в БО то всё понятно. Пример этого:

DECLARE CampmemSMS NAMESPACE 'http://www.ibm.com/xmlns/prod/wbi/j2ca/siebel/bocampaignmemberssmsbccampaignmemberssms';
SET OutputRoot.DataObject.CampmemSMS:BOCampaignMembersSMSBCCampaignMembersSMS.CampaignId=Environment.CampaignId;
SET OutputRoot.DataObject.CampmemSMS:BOCampaignMembersSMSBCCampaignMembersSMS.Id=ref.(XMLNSC.Attribute)ClientId;
SET OutputRoot.DataObject.CampmemSMS:BOCampaignMembersSMSBCCampaignMembersSMS.Status='передано';
SET OutputRoot.DataObject.CampmemSMS:BOCampaignMembersSMSBCCampaignMembersSMS.Comments=SUBSTRING(ref from 1 for 1499);

Однако если мы хотим работать с БК не являющимся главным компонентов в БО, то начинаются проблемы. Во первых нельзя просто создать адаптер нацеленный на произвольный БК в пределах БО (если не включать главный БК в данном БО). Просто нельзя.

То есть придётся в любом случае включать главный БК в пределах данного БО даже если мы обращаемся к другому (не главному) БК. Однако и это ещё не всё. Обращаться нужно через так называемый контейнер (смотри что создаётся в МессаджСете при создании адаптера включающего главный БК в пределах БО и какой-нибудь ещё БК).


InputRoot.DataObject.CampmemContainerSMS:BOCampaignMembersSMSBCCampaignMembersSMSContainer[<].BOCampaignMembersSMSBCCampaignMembersSMS[<].TreatmentId;

DECLARE CampmemContainerSMS NAMESPACE 'http://www.ibm.com/xmlns/prod/wbi/j2ca/siebel/bocampaignmemberssmsbccampaignmemberssmscontainer';
DECLARE CampmemSMS NAMESPACE 'http://www.ibm.com/xmlns/prod/wbi/j2ca/siebel/bocampaignmemberssmsbccampaignmemberssms';

Важное примечание: В случае если вы добавляете новый сибелёвский адаптер настроенный на БО уже использующийся в другом адаптере в данном потоке и кладёте его в тот же самый мессадж-сет. То вы должны учитывать, что поведение других адаптеров настроенных на данный бо может измениться так как это поведение храниться в месадж-сете, а вы как раз его и изменяете. Выход есть. Создавайте другой мессадж-сет.


Добавление на аплет кнопок "show more/show less"
siebel_crm_rus

Кнопки раскрывают/свёртывают данный аплет на весь экран. Что может быть нужно если аплет содержит много записей с которыми нужно работать одновременно

Вот как выглядят эти кнопки в свёрнутом/развёрнутом состоянии и

Вот как это выглядит в тулсах:

Вот собственно и всё. Добавлю только что чем создавать с нуля, можно скопировать из существующего аплета


Java Data Bean
siebel_crm_rus

ссылки:

import com.siebel.data.*;

public class MyJavaDataBean {
private SiebelDataBean m_dataBean = null;
private SiebelBusObject m_busObject = null;
private SiebelBusComp m_busComp = null;
private SiebelService m_busServ=null;

public static void main(String[] args)
{
MyJavaDataBean demo = new MyJavaDataBean();
}

public MyJavaDataBean()
{
try
{
// instantiate the Siebel Data Bean
m_dataBean = new SiebelDataBean();

// login to the server
m_dataBean.login("siebel://siebeltest01.corp.icba.biz:2321/SBLTEST/FINSObjMgr_enu", "логин", "пароль","enu");
System.out.println(m_dataBean.loginName());

// get the business object
m_busObject = m_dataBean.getBusObject("Contact");

// get the business component
m_busComp = m_busObject.getBusComp("Contact");

m_busComp.setSearchSpec("Id", "*");
m_busComp.executeQuery(true);
System.out.println(m_busComp.firstRecord());
System.out.println(m_busComp.getFieldValue("Last Name"));

// logoff
m_dataBean.logoff();
}

catch (SiebelException e)
{
System.out.println(e.getErrorMessage());
}
}
}

Tags:

Подключение самописного внешнего java-кода к большому серверу сибеля
siebel_crm_rus

Алгоритм с минимальными объяснениями по пунктам

смотри предыдущую статью

1)Взять исходную строчку (см рис ниже) classpath из файла /u02/siebel/gtwysrvr/sys/siebns.dat

В нашем случае это строка вида

/u02/siebel/siebsrvr/classes/Siebel.jar:/u02/siebel/siebsrvr/classes/SiebelJI_enu.jar:/u02/siebel/siebsrvr/classes/sqljdbc_1.2/enu/sqljdbc.jar:/u02/siebel/siebsrvr/classes/CROC/IntegraBusServ.jar:/u02/siebel/siebsrvr/classes/CROC/sbj/SiebelSmsInform.jar:/u02/siebel/siebsrvr/classes/CROC/sbj/SmsInformDownloadFromCisco.jar

2) Допустим у нас есть собственный java-файл

package ru;

import com.siebel.data.SiebelPropertySet;
import com.siebel.eai.SiebelBusinessService;
import com.siebel.eai.SiebelBusinessServiceException;

public class Test1 extends SiebelBusinessService {

public void doInvokeMethod(String methodName, SiebelPropertySet input, SiebelPropertySet output)
throws SiebelBusinessServiceException {
output.setProperty("Z", "JV");
}
}

и обёртывающий его EAI BS (унаследованный (в том смысле, что скопированный) с EAI Java Business Service)

и наконец код вызова из кнопки (серверный скрипт) на аплете

//вызов самодельного jar-ника
var inpPS: PropertySet = TheApplication().NewPropertySet();
var outPS: PropertySet = TheApplication().NewPropertySet();
var bs:Service = TheApplication().GetService("TAlexJavaBS");
bs.InvokeMethod("CreateNewEmailCampMessageToMQ", inpPS, outPS);
TheApplication().RaiseErrorText(outPS.GetProperty("Z"));
outPS=null; inpPS=null; bs=null;
return CancelOperation;

3) Для компиляции нашего джава кода в джарник нужно использовать джаву которой пользуется сибель (см первый рисунок в статье)
Очень важно выдержать правильную структуру папок и последовательность команд компиляции

где содержимое файла хмл:

<?xml version = '1.0' encoding = 'windows-1251'?>
<application-client xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd" version="1.4" xmlns="http://java.sun.com/xml/ns/j2ee">
<display-name>Test1-app-client</display-name>
</application-client>

а содержимое файла с манифестом

Manifest-Version: 1.0
Class-Path: commons-logging.jar commons-logging-api.jar ejb.jar http_c
lient.jar jaxen.jar jaxr-api.jar jaxrpc-api.jar jazncore.jar jms.jar
jta.jar mail.jar mdds.jar oc4jclient.jar ojdl2.jar ojmisc.jar ojpse.j
ar oraclepki.jar orajaxr.jar orasaaj.jar orawsdl.jar orawsrm.jar osdt
_cert.jar osdt_core.jar osdt_saml.jar osdt_wss.jar osdt_xmlsec.jar re
laxngDatatype.jar saaj-api.jar servlet.jar wsclient.jar wsdl.jar wsse
curity.jar wsserver.jar xdb.jar xsdlib.jar xml.jar xmlparserv2.jar
Created-By: Oracle JDeveloper 10.1.3.4.0
Main-Class: ru.Test1

И наконец последовательность команд для компиляции имеющегося у нас .java :

cd /u01/siebel/siebsrvr/classes/my/jcode
/usr/java5/bin/javac -classpath "/u01/siebel/siebsrvr/classes/Siebel.jar:/u01/siebel/siebsrvr/classes/SiebelJI_enu.jar" ./source/ru/Test1.java
/usr/java5/bin/jar cvfm TestTAlex3.jar MANIFEST.MF -C source/ .

История команд:

bash-3.00$ cd /u01/siebel/siebsrvr/classes/my/jcode
bash-3.00$ /usr/java5/bin/javac -classpath "/u01/siebel/siebsrvr/classes/Siebel.jar:/u01/siebel/siebsrvr/classes/SiebelJI_enu.jar" ./source/ru/Test1.java
bash-3.00$ /usr/java5/bin/jar cvfm TestTAlex3.jar MANIFEST.MF -C source/ .
added manifest
ignoring entry META-INF/
adding: META-INF/application-client.xml(in = 363) (out= 205)(deflated 43%)
adding: ru/(in = 0) (out= 0)(stored 0%)
adding: ru/Test1.class(in = 564) (out= 332)(deflated 41%)
adding: ru/Test1.java(in = 393) (out= 201)(deflated 48%)

4) в аплете настроек (см первый скриншот в статье) мы помещаем в classpath строчку

/u01/siebel/siebsrvr/classes/Siebel.jar:/u01/siebel/siebsrvr/classes/SiebelJI_enu.jar:/u01/siebel/siebsrvr/classes/sqljdbc_1.2/enu/sqljdbc.jar:/u01/siebel/siebsrvr/classes/CROC/IntegraBusServ.jar:/u01/siebel/siebsrvr/classes/CROC/sbj/SiebelSmsInform.jar:/u01/siebel/siebsrvr/classes/CROC/sbj/SmsInformDownloadFromCisco.jar:/u01/siebel/siebsrvr/classes/my/jcode/TestTAlex3.jar

5)Перезапускаем сервер сибеля (неважно каким способом). Чтобы считались заново настройки


Длинный, короткий и суперкотокий способы запуска/остановки сервера сибеля
siebel_crm_rus

Длинный(всё) и Короткий(красный) способ остановки/запуска


Для подкладывания нового репозитория или новых параметров (например в Profile Configuration)

Остановка

. $HOME/env.sh
/usr/IBMIHS/bin/stopapa
cd $HOME/siebsrvr
. ./siebenv.sh
. ./cfgenv.sh
cd $HOME/siebsrvr/bin
./stop_server ALL

Служба [SBLTEST_siebeltest02]

cd $HOME/gtwysrvr
. ./siebenv.sh
cd $HOME/gtwysrvr/bin
./stop_ns

Запуск

$HOME/env.sh
cd $HOME/gtwysrvr
. ./siebenv.sh
cd $HOME/gtwysrvr/bin
./start_ns

cd $HOME/siebsrvr
. ./siebenv.sh
. ./cfgenv.sh

Служба [SBLTEST_siebeltest02] или Служба [URSA_winsiebel01]


cd $HOME/siebsrvr/bin
./start_server ALL
/usr/IBMIHS/bin/startapa

Суперкороткий способ

Правой клавишей мыши. Сначала Start Reconfiguration. Потом Commit Reconfiguration. И перезайти в браузер