Про Service Connect, Business Events и входящий XML/XSD.

Автор Сообщение
Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 23.04.2013 18:25 Заголовок сообщения: Про Service Connect, Business Events и входящий XML/XSD.
Добрый день,
Помогите, пожалуйста, с вопросом по iScala Service Connect (iScala 2.3 SR3 HF 13334).

Через iScala Administration Console, в Business Events/Events Types настроено отслеживать обновление карточки клиента. При наступлении этого события запускает Workflow.

1. Правильно ли я понимаю, что вместе со стартом workflow-a на его вход подается некий XML c данными?

2. Если первое верно то:
a. где я могу найти XML schema (XSD) для передаваемого в workflow XML-a?
b. возможно ли как-то увидеть/сохранить передаваемы при наступлении заданного business event, исходный XML?

Для чего надо:
Во всех готовых (идущих в комплекте с SC) процессах занимающихся выталкиванием данных из iScala перед вызовом Manager стоит кубик Conversion в котором указана только выходная схема и готовый xlst который в графическом режиме не отображается.
Если у меня Business Event для которого нет готового workflow-a то без входной схемы конвертацию не сделать. Вот я и ищу как получить XSD для входящего XML-а.

Rolling Eyes

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 24.04.2013 17:44 Заголовок сообщения:
Добрый день, Андрей!

Да, бизнес событие передает на вход workflow XML. Это совсем простое сообщение обычно с одним-двумя значащами полями (если не считать старндартный скальский конверт). В случае с клиентом это будет код клиента. Схемы для этого сообщения в стандартной поставке нет, можно, конечно, сделать самому, но обычно просто не требуется.

Conversion без входной (да и без выходной) схемы работает без проблем. Если схема не указана, то используется схема внутреннего конверта (InternalMessage вроде). Эта схема разрешает любые элементы в разделе dta.

Посмотреть все сообщения проще всего включив document tracking.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 25.04.2013 12:00 Заголовок сообщения:

Цитата:
Это совсем простое сообщение обычно с одним-двумя значащами полями (если не считать старндартный скальский конверт). В случае с клиентом это будет код клиента.


Даже в случае Business Event-а „обновление карточки клиента” будет передаваться только код клиента, в карточке которого было сделано изменение? Т.е. в поступающем на вход Workflow-а XML-е не будет информации о самих изменениях сделанных в карточке? Спасибо.

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 25.04.2013 12:59 Заголовок сообщения: Где посмотреть сами изменения

Andrejs писал(а):
Т.е. в поступающем на вход Workflow-а XML-е не будет информации о самих изменениях сделанных в карточке? Спасибо.

Сами изменения можно посмотреть в соответствующем журнале, при условии, что у Вас включен соответствующий параметр. Пример реализации описан здесь: http://scala.org.ru/scala/viewtopic.php?t=318

Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 25.04.2013 16:23 Заголовок сообщения: Про Service Connect, Business Events и входящий XML/XSD.
Хорошо. По Busienss Event передается только код клиента внутри iScala-овского InternalMessage конверта (в node dta). Убедился на практике. Smile

[/quote]

1. Допустим, что теперь я хочу вытолкнуть из iScala всю информацию об этом клиенте. За это отвечает iScala Manager „Customer Out”. Так?

2. Для работы iScala Manager-a „Customer Out” в него нужно передать XML заявку советующую схеме http://scshost/schemas/Scala/1.1/CustomerRequest.xsd. Так?

3. Вопрос. Как мне используя Conversion подготовить правильный CustomerRequest XML?

Конфигурирую Conversion:
a. Входящая схема – пусто. Предпологает стандартный Internal Message.

b. Исходящая схема http://scshost/schemas/Scala/1.1/CustomerRequest.xsd.

c. Открываю XSLT графический редактор. Справа все красиво — в node dta доступны все описанные в CustomerRequest.xsd поля. Слева только стандартный конверт с пустой node dta.

По логике я должен как-то передать в CustomerRequest полученный по Busiens Event код клиента. Т.е. соединить CustCode слева с чем-то справа. Но во-первых слева dta node не содержит CustCode элемента(входящая схема небела указана/неизвестна) во вторых с чем соединять в правой стороне?

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 25.04.2013 16:53 Заголовок сообщения:

Andrejs писал(а):
Даже в случае Business Event-а „обновление карточки клиента” будет передаваться только код клиента, в карточке которого было сделано изменение? Т.е. в поступающем на вход Workflow-а XML-е не будет информации о самих изменениях сделанных в карточке?


Да, именно так.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 25.04.2013 16:58 Заголовок сообщения: Re: Где посмотреть сами изменения

aav писал(а):
Сами изменения можно посмотреть в соответствующем журнале, при условии, что у Вас включен соответствующий параметр. Пример реализации описан здесь: http://scala.org.ru/scala/viewtopic.php?t=318


О, действительно, если задача состоит только в отслеживании изменений, то стандартная фукнциональность аудита как раз для этого и сделана. Не очень удобно просматривать изменения старндартными средствами, но это можно поправить отчетом или быстрым поиском.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 25.04.2013 17:14 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD.

Andrejs писал(а):
Открываю XSLT графический редактор. Справа все красиво — в node dta доступны все описанные в CustomerRequest.xsd поля. Слева только стандартный конверт с пустой node dta.

По логике я должен как-то передать в CustomerRequest полученный по Busiens Event код клиента. Т.е. соединить CustCode слева с чем-то справа. Но во-первых слева dta node не содержит CustCode элемента(входящая схема небела указана/неизвестна) во вторых с чем соединять в правой стороне?


Я бы сделал это так — открываем редактор XSLT, соединяем CustCode слева с любым узлом справа, переключаемся из графичекого режима в текстовый и исправляем получившийся текст. Должно быть что-то типа этого (извини, за правильность не ручаюсь — не проверял):

Код:
<xsl:if test="msg:dta/CustCode">
  <xsl:element name="dta:CustCode">
    <xsl:value-of select="msg:dta/CustCode"></xsl:value-of>
  </xsl:element>
</xsl:if>


В общем без ручной правки XSLT удается работать только до определенного момента, тут главное освоить отладку преобразований внешними средствами. Я для этой цели использую Visual Studio (нужна версия не ниже Professional).
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 25.04.2013 18:06 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD.

Dmitry Pestov писал(а):
В общем без ручной правки XSLT удается работать только до определенного момента, тут главное освоить отладку преобразований внешними средствами. Я для этой цели использую Visual Studio (нужна версия не ниже Professional).


Вот именно!!!
К сожалению, не всегда можно просто взять и нарисовать связи в графическом интерфейсе, иногда приходится прописывать их "руками".

Я лично делаю это в Notepad’е Very Happy

Графический интерфейс до определённого момента тоже можно использовать Very Happy

Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 25.04.2013 19:00 Заголовок сообщения: О концептуальной верности идеи
Дмитрий, Алексей a вы можете подтвердить, что идея с соединением CustCode слева с чем-то справа концептуально верна?
xslt идущий со стандартными ESC workflow-вом обрабатывающим Business Envents разительно отличаются от того, что получается при графическом соединении левой/правой сторон.

Например, стандартный EventCustomerUpdate_CustomerRequest.xslt из пакета CoreData\SendCustomerDetails выглядит так:

Код:
<xsl:stylesheet version="1.0" xmlns:dta="http://www.scala.net/CustomerRequest/1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:msg="http://Epicor.com/InternalMessage/1.1">
   <xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="yes"/>
   <xsl:strip-space elements="*"/>
   <xsl:attribute-set name="ENV_NS">
      <xsl:attribute name="xsi:schemaLocation">http://Epicor.com/InternalMessage/1.1 http://scshost/schemas/Epicor/ScaInternalMsg.xsd</xsl:attribute>
   </xsl:attribute-set>
   <xsl:attribute-set name="CUST_NS">
      <xsl:attribute name="xsi:schemaLocation">http://www.scala.net/CustomerRequest/1.1 http://scshost/schemas/Scala/1.1/CustomerRequest.xsd</xsl:attribute>
   </xsl:attribute-set>
   <xsl:template match="/">
      <xsl:element name="msg:msg" use-attribute-sets="ENV_NS">
         <xsl:apply-templates select="/msg:msg/msg:req"/>
      </xsl:element>
   </xsl:template>
   <xsl:template match="msg:req">
      <xsl:element name="msg:req">
         <xsl:apply-templates select="attribute::*"/>
         <xsl:apply-templates select="*[local-name()!=’wfl’]" mode="ENV_COPY"/>
         <xsl:choose>
           <xsl:when test="msg:dta/BusinessDest">
                  <xsl:apply-templates select="../msg:req" mode="ADD_DEST"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:apply-templates select="msg:wfl" mode="ENV_COPY"/>
                </xsl:otherwise>
         </xsl:choose>
      </xsl:element>
   </xsl:template>
   <xsl:template match="msg:dta" mode="ENV_COPY">
      <xsl:element name="msg:dta">
         <xsl:element name="dta:CustomerRequest" use-attribute-sets="CUST_NS">
            <xsl:apply-templates select="child::*[local-name()!=’BusinessDest’]" mode="ADD_PREFIX"/>
         </xsl:element>
      </xsl:element>
   </xsl:template>
   <xsl:template match="*" mode="ADD_PREFIX">
      <xsl:element name="dta:{name(.)}">
         <xsl:choose>
            <xsl:when test="count(child::*)&gt;0">
               <xsl:apply-templates select="child::*" mode="ADD_PREFIX"/>
            </xsl:when>
            <xsl:otherwise>
               <xsl:choose>
                  <xsl:when test="local-name(.)=’Min’ or local-name(.)=’Max’">
                     <xsl:value-of select="."/>
                  </xsl:when>
                  <xsl:otherwise>
                     <xsl:element name="dta:Min">
                        <xsl:value-of select="."/>
                     </xsl:element>
                     <xsl:element name="dta:Max">
                        <xsl:value-of select="."/>
                     </xsl:element>
                  </xsl:otherwise>
               </xsl:choose>
            </xsl:otherwise>
         </xsl:choose>
      </xsl:element>
   </xsl:template>
   
   <xsl:template match="msg:req" mode="ADD_DEST">
     <xsl:element name="msg:wfl">
       <xsl:for-each select="msg:wfl/child::*[local-name()!=’BusinessDest’]">
         <xsl:copy-of select="."/>
       </xsl:for-each>
       <xsl:element name="msg:BusinessDest">
         <xsl:value-of select="msg:dta/BusinessDest"/>
       </xsl:element>
     </xsl:element>
   </xsl:template>
   
   <xsl:template match="*" mode="ENV_COPY">
      <xsl:copy-of select="."/>
   </xsl:template><!— Copy all the attributes —>
   <xsl:template match="@*">
      <xsl:attribute name="{name(.)}">
         <xsl:value-of select="."/>
      </xsl:attribute>
   </xsl:template>
</xsl:stylesheet>

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 25.04.2013 20:28 Заголовок сообщения: Re: О концептуальной верности идеи

Andrejs писал(а):
Дмитрий, Алексей a вы можете подтвердить, что идея с соединением CustCode слева с чем-то справа концептуально верна?


Так проверьте! Я всегда проверяю. Нет лучшего способа удостовериться, как попробовать самому. Тем не менее, Дмитрию верьте, он плохого не посоветует, он на этом собаку съел.

Вот мой результат:

Very Happy

Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 25.04.2013 22:07 Заголовок сообщения:
Помогите буксую Smile
Соеденил левую node dta c правым CustCode.
Получил сообщение:
The source http://Epicor.com/InternalMessage/1.1 and target http://www.scala.net/CustomerRequest/1.1 namespaces are different. The „copy-of” form produces output xml which does not correspond to the output schem.
Try to correct the mapping using „value-of” form for all subsequence nodes?
Yes/No

Согласился — Yes.
Открываю полученный xslt редактором и вижу странный name space в начале документа

xmlns:msg="http://Epicor.com/InternalMessage/1.1" xmlns:ext_1-1_1="http://www.scala.net/CustomerRequest/1.1">

В части отвечающей вроде как за конвертацию понять что нужно менять не могу. Я так подозреваю как-то задействованы Min, Max элементы в CustCode. Что с ними делать? Smile

Код:
 <xsl:element name="msg:dta">
            <xsl:element name="ext_1-1_1:CustomerRequest">
              <xsl:if test="msg:dta/*">
                <xsl:element name="ext_1-1_1:CustCode">
                  <xsl:copy-of select="msg:dta/*"></xsl:copy-of>
                </xsl:element>
              </xsl:if>
            </xsl:element>
          </xsl:element>

[/code]

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 26.04.2013 07:18 Заголовок сообщения:

Andrejs писал(а):
Помогите буксую Smile
Соеденил левую node dta c правым CustCode.


Ну тут я немного тебя запутал, не посмотрел в схему. Код покупателя должен попадать в узлы Min и Max, а не в CustCode. У Алексея именно так и сделано — он не поленился проверить Smile
Плюс к этому в твоем варианте пространстов имен dta уже занято другой схемой, поэтому сформировалось пространство ext… Может ты мне просто позвонишь, контакты пошлю личным сообщением.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 26.04.2013 11:44 Заголовок сообщения: Про полезность публичного обсуждения

Dmitry Pestov писал(а):
Может ты мне просто позвонишь, контакты пошлю личным сообщением.

Ничто не заменит личных контактов, но публичное обсуждение темы, этой в частности, считаю также очень полезным, оно, конечно, гораздо медленнее, но остаётся доступным другим людям. Это так важно, иметь возможность "быть в теме" Very Happy

Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 26.04.2013 14:31 Заголовок сообщения: Про Service Connect, Business Events и входящий XML/XSD.
Алексей, а вы не могли бы свой xslt выложить? Rolling Eyes
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 26.04.2013 14:45 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD.
Придётся немного подождать, сейчас виртуальная машина "поднимется", тогда и выложу
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 26.04.2013 14:59 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD.

Andrejs писал(а):
Алексей, а вы не могли бы свой xslt выложить? Rolling Eyes

Публикую "как есть", не претендуя на то что это правильная конструкция. У меня, по крайней мере, работает.

Код:
<?schema_locations source_url="" source_root="msg" destination_url="" destination_root="msg"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msg="http://Epicor.com/InternalMessage/1.1" xmlns:dta="http://www.scala.net/CustomerRequest/1.1">
   <xsl:output method="xml" version="1.0" indent="yes" omit-xml-declaration="no"></xsl:output>
   <xsl:template match="/">
      <xsl:apply-templates select="*"></xsl:apply-templates>
   </xsl:template>
   <xsl:template match="msg:msg">
      <xsl:element name="msg:msg">
         <xsl:for-each select="msg:req">
            <xsl:element name="msg:req">
               <xsl:if test="msg:ctx/*">
                  <xsl:element name="msg:ctx">
                     <xsl:copy-of select="msg:ctx/*"></xsl:copy-of>
                  </xsl:element>
               </xsl:if>
               <xsl:element name="msg:dta">
                  <xsl:element name="dta:CustomerRequest">
                     <xsl:element name="dta:CustCode">
                        <xsl:if test="msg:dta/CustCode">
                           <xsl:element name="dta:Min">
                              <xsl:value-of select="msg:dta/CustCode"></xsl:value-of>
                           </xsl:element>
                        </xsl:if>
                        <xsl:if test="msg:dta/CustCode">
                           <xsl:element name="dta:Max">
                              <xsl:value-of select="msg:dta/CustCode"></xsl:value-of>
                           </xsl:element>
                        </xsl:if>
                     </xsl:element>
                  </xsl:element>
               </xsl:element>
               <xsl:element name="msg:wfl">
                  <xsl:if test="msg:wfl/msg:usr/*">
                     <xsl:element name="msg:usr">
                        <xsl:copy-of select="msg:wfl/msg:usr/*"></xsl:copy-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:ElemID">
                     <xsl:element name="msg:ElemID">
                        <xsl:value-of select="msg:wfl/msg:ElemID"></xsl:value-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:PrcID">
                     <xsl:element name="msg:PrcID">
                        <xsl:value-of select="msg:wfl/msg:PrcID"></xsl:value-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:SubWF/*">
                     <xsl:element name="msg:SubWF">
                        <xsl:copy-of select="msg:wfl/msg:SubWF/*"></xsl:copy-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:RefID">
                     <xsl:element name="msg:RefID">
                        <xsl:value-of select="msg:wfl/msg:RefID"></xsl:value-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:Task/*">
                     <xsl:element name="msg:Task">
                        <xsl:copy-of select="msg:wfl/msg:Task/*"></xsl:copy-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:Ack">
                     <xsl:element name="msg:Ack">
                        <xsl:value-of select="msg:wfl/msg:Ack"></xsl:value-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:MsgType">
                     <xsl:element name="msg:MsgType">
                        <xsl:value-of select="msg:wfl/msg:MsgType"></xsl:value-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:Action">
                     <xsl:element name="msg:Action">
                        <xsl:value-of select="msg:wfl/msg:Action"></xsl:value-of>
                     </xsl:element>
                  </xsl:if>
                  <xsl:if test="msg:wfl/msg:DataPaging/*">
                     <xsl:element name="msg:DataPaging">
                        <xsl:copy-of select="msg:wfl/msg:DataPaging/*"></xsl:copy-of>
                     </xsl:element>
                  </xsl:if>
               </xsl:element>
            </xsl:element>
         </xsl:for-each>
         <xsl:if test="msg:trc/*">
            <xsl:element name="msg:trc">
               <xsl:copy-of select="msg:trc/*"></xsl:copy-of>
            </xsl:element>
         </xsl:if>
      </xsl:element>
   </xsl:template>
</xsl:stylesheet>


Руками правился вот этот фрагмент:

Код:
                        <xsl:if test="msg:dta/CustCode">
                           <xsl:element name="dta:Min">
                              <xsl:value-of select="msg:dta/CustCode"></xsl:value-of>
                           </xsl:element>
                        </xsl:if>
                        <xsl:if test="msg:dta/CustCode">
                           <xsl:element name="dta:Max">
                              <xsl:value-of select="msg:dta/CustCode"></xsl:value-of>
                           </xsl:element>
                        </xsl:if>

Andrejs
Старший форумщик

Зарегистрирован: 22.03.2013
Сообщения: 21
Откуда: Latvia

Добавлено: 26.04.2013 15:42 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD
Большое спасибо.

А если по шагам рассмотреть конфигурирование "кубика" Conversion в Workflow-ве, то в какой момент вы переключились в режим notepad? Вы в графической среде что-то соединяли прежде чем редактировать?
Необычный namespace xmlns:ext_1-1_1 вы исправляли тоже или он только у меня появляется?

aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 26.04.2013 16:06 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD
Если по шагам, то я соединил вот таким образом:

Получилось вот что:

Код:
                <xsl:if test="msg:wfl/msg:WflID">
                  <xsl:element name="dta:Min">
                    <xsl:value-of select="msg:wfl/msg:WflID"></xsl:value-of>
                  </xsl:element>
                </xsl:if>
                <xsl:if test="msg:wfl/msg:WflID">
                  <xsl:element name="dta:Max">
                    <xsl:value-of select="msg:wfl/msg:WflID"></xsl:value-of>
                  </xsl:element>
                </xsl:if>

и после этого заменил все msg:wfl/msg:WflID на msg:dta/CustCode

Что касается xmlns:ext_1-1_1, то в этот раз у меня все получилось само собой, но обычно система что-то вроде этого (xmlns:ext_1-1_1) и подставляет. Удобно это заменить на что-то более понятное. Мой учитель Дмитрий Осипов снабдил меня примерами, где заменяет исходное пространство имён (исходной схемы, схемы-источника) на src, я обычно таким же образом и пытаюсь поступить, впрочем, кому как удобно.

Дмитрий Пестов на порядки опытнее меня в этих вопросах.

Вообще, XSLT для меня, учителя биологии и химии по первому, не законченному образованию, и профессионального менеджера по третьему, законченному Very Happy, это жесть. Слишком сложно и непрозрачно. Более подходит для настоящих математиков. Но Дмитрий Осипов теперь работает в другой компании, и, раз его нет, кто-то должен с этим разбираться, вот и разбираюсь, насколько могу Very Happy

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 26.04.2013 19:58 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD
Тут все уже по косточкам разобрали Very Happy
Сам по себе язык XSLT вроде и не сложный, но забывается моментально. Такое впечатление, что каждый раз, как он нужен, ты учишь его заново.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala
aav
Администратор
Администратор

Зарегистрирован: 14.09.2004
Сообщения: 1081
Откуда: Санкт-Петербург

Добавлено: 26.04.2013 21:25 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD

Dmitry Pestov писал(а):
Сам по себе язык XSLT вроде и не сложный, но забывается моментально. Такое впечатление, что каждый раз, как он нужен, ты учишь его заново.

Какой-то он не такой, с одной стороны, есть знакомые вещи, с другой, видимо, структурирован иначе Very Happy
Я много чем пользовался. В институте изучал Алгол 60 Very Happy, в начале компьютерной эры пользовал Clarion 2, Turbo Pascal, Basic, но всё это было так, любительщина, позднее, осваивал Delphi, PHP, PERL, DHTML, VB, TSQL, RDL, но также никогда не считал себя программистом, лишь по необходимости, в большинстве случаях отталкиваясь от чужого кода и учась на примерах. Наверное, для консультанта это нормально, как считаете? Very Happy

Dmitry Pestov
Заслуженный форумщик

Зарегистрирован: 21.06.2007
Сообщения: 94
Откуда: Москва, ApicoSoft

Добавлено: 27.04.2013 10:24 Заголовок сообщения: Re: Про Service Connect, Business Events и входящий XML/XSD

aav писал(а):
Наверное, для консультанта это нормально, как считаете? Very Happy


На мой взгляд так и должно быть. Клиенты разные, условия у них тоже крепко различаются. Да и сами задачи — от простых отчетов до веб-приложений. В результает в ходу как новые среды программирования, так и такие динозавры как VB6. Если изучать весь этот зоопарк до деталей, то на решение самих задач времени не останется.
_________________
Dmitry Pestov

Блог ScalaHelp.RU — практические вопросы использования Scala