7.2 Regras chave
7.2.4 Regras chave de merge
<sharedfragmentkeyrule> <refobjects> <refobject objecttype="OT_EVT"> <objectname name="EVT_ACE"/> <objectname name="EVT_GIK"/> </refobject> </refobjects> <keyparts> <keypart attributetype="AT_XYZ"/> </keyparts> </sharedfragmentkeyrule> ... </keyrules>
7.2.4 Regras chave de merge
As regras chave de merge são usadas para mesclar eventos de merge em uma instância de processo. Dessa forma, os fragmentos de instância de processo associados usando chaves de processo são vinculados para formar uma instância de processo.
As chaves de merge são calculadas a partir de atributos de objeto específicos do fragmento de instância do processo. Eles são usados para reconstruir a lógica do processo da instância de processo e os fragmentos não vinculados são vinculados devidamente.
O PPM diferencia entre dois procedimentos de merge: Merge baseada na chave
Merge baseada na ordem de classificação
O procedimento de merge relevante é especificado no arquivo de configuração XML
*_merger.xml. A estrutura desse arquivo é especificada na DTD mergerconfig.dtd.
ARQUIVO MERGERCONFIG.DTD (PARTE 1)
<!ELEMENT mergerconfig ( mergehandling, connectorhandling? )>
<!ELEMENT mergehandling ( sharedfragmentmerge?, processmerge?, eventmerge+ )> <!ATTLIST mergehandling eventmode (startevent | endevent | importtime) "importtime"> <!ELEMENT sharedfragmentmerge ( algorithm )>
<!ELEMENT processmerge ( algorithm?, mergeattributes?)> <!ATTLIST processmerge
mode (replace|update) 'replace'>
<!ELEMENT eventmerge ( mode, condition?, algorithm? )> <!ATTLIST eventmerge
key ID #IMPLIED
priority CDATA #IMPLIED> <!ELEMENT condition EMPTY>
<!ATTLIST condition
classname NMTOKEN #REQUIRED value (TRUE|FALSE) 'TRUE' comment CDATA #IMPLIED> <!ELEMENT algorithm EMPTY> <!ATTLIST algorithm
classname NMTOKEN #REQUIRED comment CDATA #IMPLIED>
<!ELEMENT mergeattributes (attribute+)> <!ELEMENT attribute EMPTY>
<!ATTLIST attribute key CDATA #REQUIRED>
<!ELEMENT mode ( keymerge | sortmerge )> <!ELEMENT keymerge EMPTY >
<!ELEMENT sortmerge ( criterion*, algorithm? )> <!ELEMENT criterion EMPTY>
<!ATTLIST criterion
name NMTOKEN #REQUIRED>
Marca XML Descrição
mergerconfig Agrupamento da configuração de merge mergehandling Tipo de merge a ser configurado. Tem de ser
especificado pelo menos um elemento
eventmerge.
sharedfragmentmerge (opcional)
Algoritmo diferente do algoritmo padrão para mesclar os fragmentos compartilhados com fragmentos de instância de processo
processmerge (opcional)
Algoritmo diferente do algoritmo padrão para mesclar os fragmentos de instância de
processo. Os modos Substituir ou Atualizar estão disponíveis para seleção. O valor padrão é Substituir.
eventmerge Algoritmo diferente do algoritmo padrão para mesclar os eventos de merge
chave (opcional)
ID que pode ser usado para to referenciar o elemento eventmerge.
prioridade (opcional)
Prioridade do elemento eventmerge – quanto mais baixo o valor inteiro, maior a prioridade. condição
(opcional)
Condição para mesclagem de eventos de merge
classname Nome da classe JAVA, que verifica a condição especificada
Marca XML Descrição
valor (opcional)
A condição é atendida se a verificação da classe JAVA retornar o valor especificado (TRUE ou FALSE). O valor padrão é TRUE. algoritmo
(opcional)
Regra de cálculo (classe JAVA)
classname Classe JAVA que implementa uma regra de cálculo específica
modo Procedimento de merge para mesclagem de eventos
keymerge Merge de eventos baseada em chave, com base em chaves de merge definidas
sortmerge Merge de eventos baseada na ordem de classificação de funções
critério Critério (atributo de função) a ser usado como base para ordenar os fragmentos. Podem ser especificados diversos critérios.
name Nome do atributo de função
ARQUIVO MERGERCONFIG.DTD (PARTE 2)
<!ELEMENT connectorhandling ( multiindegreehandling?, multioutdegreehandling?, andhandling?, orhandling?, xorhandling?)>
<!ELEMENT multiindegreehandling (algorithm) > <!ELEMENT multioutdegreehandling (algorithm) > <!ELEMENT andhandling (algorithm) >
<!ELEMENT orhandling (algorithm) > <!ELEMENT xorhandling (algorithm) >
Marca XML Descrição
connectorhandling (opcional)
Tratamento de conectores em gráficos de processo especificando uma classe JAVA (algorithm)
multiindegreehandling (opcional)
Algoritmo que controla a inserção de
conectores com várias conexões de entrada para a merge de objetos
multioutdegreehandling (opcional)
Algoritmo que controla a inserção de conectores com várias conexões de saída para a merge de objetos
Marca XML Descrição
andhandling (opcional)
Algoritmo para tratamento de conectores AND
orhandling (opcional)
Algoritmo para tratamento de conectores OR
xorhandling (opcional)
Algoritmo para tratamento de conectores XOR
Exemplo
A merge de eventos baseada em chave é usada para vincular fragmentos de instância de processo.
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE mergerconfig SYSTEM "mergerconfig.dtd"> <mergerconfig> ... <mergehandling> <eventmerge> <mode> <keymerge/> </mode> </eventmerge> </mergehandling> ... </mergerconfig>
Durante a merge de evento, o conjunto combinado de atributos de ambos os eventos de merge é copiado para o evento restante. Os atributos de objeto existentes não são substituídos. O primeiro evento de merge importado é excluído.
7.2.4.1 Merge baseada na chave
A merge baseada na chave é usada para mesclar eventos com chaves de merge idênticas. O primeiro evento de merge importado é excluído e a quantidade de chaves de merge idênticas é reduzida. O processo de merge é repetido até que não existam mais chaves de merge
idênticas na atual instância de processo.
As regras chave de merge são definidas no arquivo XML KeyRules.xml. Isso é feito especificando os atributos de um evento de fragmento envolvido na criação da chave de merge. A própria chave de merge é criada combinando os valores de atributo especificados.
EXEMPLO
O extrato de arquivo abaixo define uma regra chave de merge que usa o nome de objeto interno do evento (tipo de atributo AT_OBJNAME_INTERN) para criar a chave de merge para o evento inicial e final em um fragmento de instância de processo. Já que diversos fragmentos com a mesma definição de fragmento podem ocorrer em uma instância de processo, a chave de merge é estendida para incluir o valor do atributo AT_END_TIME.
<!DOCTYPE keyrules SYSTEM "keyrules.dtd"> <keyrules> ... <processkeyrule> ... </processkeyrule> ... <mergekeyrule> <refobjects> <refobject objecttype="OT_EVT"> <objectname name="EVT_START"/> <objectname name="EVT_END"/> </refobject> </refobjects> <keyparts> <keypart attributetype="AT_OBJNAME_INTERN"/> <keypart attributetype="AT_END_TIME"/> </keyparts> </mergekeyrule> ... </keyrules>
7.2.4.2 Merge baseada na ordem de classificação
A merge baseada em ordem de classificação mescla eventos baseados em determinados critérios de classificação. Qualquer quantidade de critérios de classificação pode ser
especificada na forma de tipos de atributo de função. O evento seguinte para uma função é mesclado com o evento predecessor da função seguinte.
Por padrão, os procedimentos alfanuméricos e cronológicos são implementados no PPM. O método usado é especificado pelo tipo de dados do critério de classificação especificado.
Um exemplo de um critério de classificação pode ser o atributo de função AT_END_TIME com o tipo de dados TIME.
Em uma merge baseada em ordem de classificação, os fragmentos de instância de processo importados podem não incluir regras. Os fragmentos de instância de processo com funções consecutivas estão divididos em EPCs mínimas (evento-função-evento).
Aviso
Certifique-se de que o critério de classificação definido está disponível em cada função das instâncias que devem ser fundidas e inclui os valores correspondentes.
No PPM 4.0 e superior, pode usar ambos os métodos de merge em uma configuração do cliente.
Exemplo
O atributo de função AT_END_TIME é usado para a merge baseada em ordem de
classificação. O carimbo de data/hora tem de ser especificado para cada função da instância. <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE mergerconfig SYSTEM "mergerconfig.dtd"> <mergerconfig>
...
<mergehandling> <eventmerge> <mode>
<sortmerge>
<criterion name = "AT_END_TIME" /> </sortmerge> </mode> </eventmerge> </mergehandling> ... </mergerconfig>
Se o atributo de classificação para diversas funções tiver o mesmo valor E forem usadas regras para criar caminhos paralelos na instância de processo mesclada.
Exemplo
Como o critério de classificação usado (AT_END_TIME) retorna um valor idêntico para as duas funções FCT 1 e FCT 2, as regras AND são usadas para criar um caminho paralelo na instância de processo mesclado.
7.2.4.3 Combinar métodos de merge
Para poder mesclar fragmentos usando métodos diferentes deve definir vários métodos de merge. Para isso, os atributos key e priority são adicionados à configuração de merge (elemento XML eventmerge).
O valor do atributo key especifica o nome do método de merge e é referenciado pelo atributo de gráfico AT_INTERNAL_EVENT_MERGE_MODE para fragmentos a serem importados. O método com a prioridade mais baixa (elemento XML priority) é usado quando fragmentos com diferentes métodos de merge são mesclados durante uma operação de importação.
O método de merge padrão é usado para fragmentos em que o atributo
AT_INTERNAL_EVENT_MERGE_MODE não é especificado. O método padrão é o que é
definido na configuração de merge sem especificar uma chave.
Aviso
Especifique prioridades diferentes para todos os métodos de merge.
Para especificar o método de merge a ser usado para diferentes tipos de evento de sistema, especifique a chave para o método de merge relevante no atributo de processo
AT_INTERNAL_EVENT_MERGE_MODE para as EPCs de definição de fragmento. Todos os
eventos de sistema importados com esta definição de fragmento são automaticamente mesclados usando o método especificado.
Aviso
Se o método de merge especificado no fragmento a ser importado não existir, o fragmento não será importado e uma mensagem de erro será exibida. A mensagem de erro também é
guardada no atributo AT_MERGE_ERROR_MESSAGE para o fragmento correspondente. O valor true é também inserido para o atributo AT_MERGE_ERROR_FLAG.
Exemplo
A configuração de merge seguinte é usada para a importação de dados e define 3 métodos: <?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE mergerconfig SYSTEM "mergerconfig.dtd"> <mergerconfig> <mergehandling> <eventmerge priority="10"> <mode> <keymerge/> </mode> </eventmerge>
<eventmerge key="SORTMERGE_ID" priority="3"> <mode>
<sortmerge>
<criterion name = "AT_ID" /> </sortmerge>
</mode> </eventmerge>
<eventmerge key="SORTMERGE_DATE" priority="4"> <mode>
<sortmerge>
<criterion name = "AT_START_TIME" /> </sortmerge>
</mode> </eventmerge> </mergehandling> </mergerconfig>
Os fragmentos sem o atributo AT_INTERNAL_EVENT_MERGE_MODE são mesclados usando o método de merge baseado em chave. Os fragmentos com o valor de atributo
SORTMERGE_ID são mesclados com base na ordem de classificação, de acordo com o
atributo de função AT_ID. Os fragmentos com o valor de atributo SORTMEGRE_DATE são mesclados com base na ordem de classificação, de acordo com o atributo de função