Ora:countNodes coding issue
I try to get the node count by the ora:countNodes api, but it's just return 0. The following lines list the detail.
Namespace: xmlns:coaebmebo="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1"
Variable: curCOA
Type: coaebmebo:GLAccountValidation (the element name in the xsd file is GLAccountValidation)
Target Node: coaebmebo:GLElementValue (the element name in the xsd file is GLElementValue)
Code (both return 0) : ora:countNodes('curC0A','GLAccountValidation', '/coaebmebo:GLElementValue')
ora:countNodes('curC0A','GLAccountValidation', '/coaebmebo:GLAccountValidation/coaebmebo:GLElementValue')
SourceXML:
<curC0A>
<GLAccountValidation xmlns="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">
<corecom:GLAccountIdentification xmlns:corecom="http://xmlns.oracle.com/EnterpriseObjects/Core/Common/V2">
<corecom:BusinessComponentID schemeID="" schemeAgencyID="" schemeVersionID=""/>
<corecom:ID schemeID="" schemeAgencyID="" schemeVersionID="">631353532353231</corecom:ID>
<corecom:ApplicationObjectKey>
<corecom:ID schemeID="" schemeAgencyID="" schemeVersionID=""/>
</corecom:ApplicationObjectKey>
<corecom:Revision>
<corecom:Number schemeID="" schemeAgencyID="" schemeVersionID=""/>
<corecom:Code listID="" listAgencyID="" listVersionID=""/>
</corecom:Revision>
</corecom:GLAccountIdentification>
<coa:ValidityDate xmlns:coa="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">2009-06-05T09:35:13-07:00</coa:ValidityDate>
<coa:GLElementValue xmlns:coa="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">
<coa:SequenceNumber>1</coa:SequenceNumber>
<coa:GLElementCode listID="" listAgencyID="" listVersionID="">1101</coa:GLElementCode>
<coa:Value>01</coa:Value>
</coa:GLElementValue>
<coa:GLElementValue xmlns:coa="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">
<coa:SequenceNumber>2</coa:SequenceNumber>
<coa:GLElementCode listID="" listAgencyID="" listVersionID="">1102</coa:GLElementCode>
<coa:Value>000</coa:Value>
</coa:GLElementValue>
<coa:GLElementValue xmlns:coa="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">
<coa:SequenceNumber>3</coa:SequenceNumber>
<coa:GLElementCode listID="" listAgencyID="" listVersionID="">1103</coa:GLElementCode>
<coa:Value>1110</coa:Value>
</coa:GLElementValue>
<coa:GLElementValue xmlns:coa="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">
<coa:SequenceNumber>4</coa:SequenceNumber>
<coa:GLElementCode listID="" listAgencyID="" listVersionID="">1104</coa:GLElementCode>
<coa:Value>1728</coa:Value>
</coa:GLElementValue>
<coa:GLElementValue xmlns:coa="http://xmlns.oracle.com/EnterpriseObjects/Core/EBO/ChartOfAccounts/V1">
<coa:SequenceNumber>5</coa:SequenceNumber>
<coa:GLElementCode listID="" listAgencyID="" listVersionID="">1105</coa:GLElementCode>
<coa:Value>000</coa:Value>
</coa:GLElementValue>
</GLAccountValidation>
</curC0A>
And another issue is, do you know that it's a convenient way to validate the code? It's really time costly by deploying the process.
Thanks in Advance
Edited by: TsinHua on Jun 7, 2009 12:03 AM
Hi James,
The following codes are the part of the xsd that related with the issue.
<xsd:element name="ProcessGLAccountValidation" type="ProcessGLAccountValidationType"/>
<xsd:complexType name="ProcessGLAccountValidationType">
<xsd:sequence>
<xsd:element ref="corecom:ChartOfAccountsIdentification" minOccurs="0"/>
<xsd:element name="ValidityDate" type="corecom:DateType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Indicate the default date on which you want to check if GL Account is valid or not. This could be the date in the past, current or future.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="GLAccountValidation" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="actionCode" type="corecom:ActionCodeType"/>
</xsd:complexType>
<xsd:element name="GLAccountValidation" type="GLAccountValidationType"/>
<xsd:complexType name="GLAccountValidationType">
<xsd:sequence>
<xsd:element ref="corecom:GLAccountIdentification" minOccurs="0"/>
<xsd:element name="ValidityDate" type="corecom:DateType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Indicate the date on which you want to check if this GL Account is valid or not. This could be the date in the past, current or future.</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element ref="GLElementValue" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="GLElementValue" type="GLElementValueType">
<xsd:annotation>
<xsd:documentation>
A sequenced set of account codes that form a GL Account which is used to record transaction.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:complexType name="GLElementValueType">
<xsd:sequence>
<xsd:element name="SequenceNumber" type="corecom:PositiveIntegerType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Sequence in which the GL Element appears in the Account Code Combination
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="GLElementCode" type="corecom:CodeType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Indicate the unique code for this GLElement. E.g. Department, Company, Cost Center.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Value" type="corecom:StringType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
The GL Element value - e.g. Account Number
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Custom" type="corechartofaccountscust:CustomGLElementValueType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="actionCode" type="corecom:ActionCodeType" use="optional"/>
</xsd:complexType>
Similar Messages
-
Unable to Count Nodes using ora:countNodes , the count is always 0
B2B is connected to BPEL , the xsd used for the given xml is :
<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.example.org"
targetNamespace="http://www.example.org"
elementFormDefault="qualified">
<xsd:element name="Root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Batch">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Warehouse" type="xsd:string"/>
<xsd:element name="BatchDate" type="xsd:integer"/>
<xsd:element name="Revision" type="xsd:string"/>
<xsd:element name="OnHand" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="ItemCode" type="xsd:string"/>
<xsd:element name="SOH" type="xsd:integer"/>
<xsd:element name="Quarantine" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
Count nodes function used by me is :
ora:countNodes('receive_InventoryReconcilliation_receive_InputVariable','body','/ns2:Root/ns2:Batch/ns2:OnHand/ns2:ItemCode')
or
ora:countNodes('receive_InventoryReconcilliation_receive_InputVariable','body','/ns2:Root/ns2:Batch/ns2:OnHand/ns2:ItemCode')
I have tried using countNodes in above two ways.
Inspite of that i always get count of nodes as 0.
How should i resolve this issue ?
Thanks in advance,
Sasmit
Edited by: Sasmit on Jun 6, 2011 6:09 AMHi Sasmit...
i was facing a same problem recently...i can see the B2B adaptor giving the file as input to my BPEL process but the count is coming as zero...then what i did was..i tried copying the value of an element in the input variable...i cannot copy the value too...So, then i figured out that when i defined the document definition in B2B console, we will be giving the XSD file right...that schema file is not in sink with the file being picked up...may be i might have done amistake while generating the XSD file for a particular document in B2B Editor...then later i created the document definition i mean the xsd file in B2B Editor and used that new XSD file in my document definition...then i could access all the data in my BPEL process...
Just try this..,may be it helps.
Thanks, -
Adobe Bridge CS6, Output to HTML Gallery coding issue.
Adobe Bridge CS6, Output to HTML Gallery coding issue.
I have created the html, JavaScript, css file using the output function in Bridge CS6, which nicely generates the coding, pages, folders and files. I can edit the html files such as gallery title, name, etc., in Dreamweaver CS6 just fine and preview them in a selected browser (both chrome and IE) and everything works fine.
When I ftp upload the files and directories into my hosting account (Go Daddy), the images do not show up. The file table appears but the thumbs images does not appear and when selected to preview the larger image, it does not appear either. I have not altered the file structure at all. Go Daddy says it is a coding issue, but I cannot fine any errors.
Have you seen this issue before? All Adobe help research have failed. Any suggestions??Have you asked on Go Daddy site for help in uploading Adobe Bridge script? Just to say it is coding is not helpful.
-
Problem with ora:countNodes...
Hi i am trying to poll database and receive the records using receive activity.
later i am trying to count the number of record polled each time.
i am using ora:countNodes function.
But i am getting the below error :
Error while processing xpath expression, the expression is "ora:countNodes(bpws:getVariableData('Receive_Data_receive_InputVariable','EmpCollection','/ns2:EmpCollection/ns2:Emp'))", the reason is FOTY0001: type error.
Please verify the xpath query.
the schema file created by the AdapterConfigurator was:
<?xml version = '1.0' encoding = 'UTF-8'?>
<xs:schema targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/db/top/DBA4GettingData" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/top/DBA4GettingData" elementFormDefault="qualified" attributeFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="EmpCollection" type="EmpCollection"/>
<xs:complexType name="EmpCollection">
<xs:sequence>
<xs:element name="Emp" type="Emp" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Emp">
<xs:sequence>
<xs:element name="empno" type="xs:int"/>
<xs:element name="ename" minOccurs="0" nillable="true"/>
<xs:element name="job" minOccurs="0" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
i am trying to count the nodes of EMP ...
Could you please tell me the solution...
Thanks in advance
chandraHi,
Have you tries using the standard xpath function count(<nodeset>) instead?
See reference: http://www.w3.org/TR/xpath#function-count.
Usage would be something like:
bpws:getVariableData('Receive_Data_receive_InputVariable','EmpCollection','count(/ns2:EmpCollection/ns2:Emp)')
Hope this helps you further.
Kind regards,
Harm -
Unable to use ora:countNodes in OBPM 11g
Hi,
I have a BPM Data Object 'solutionProposal' which has the following value after picking up the response from a service call.
<?xml version="1.0" encoding="UTF-8" ?>
<solutionProposal xmlns="http://agreement.pdom.nordea.com/solutionproposal/object/v2">
<initiatedByCustomer xmlns="">53273267</initiatedByCustomer>
<solutionProposalId xmlns="">12787382</solutionProposalId>
<!--Zero or more repetitions: -->
<tailoredPSO xmlns="">
<productServiceOfferGroupId>DEPOSIT</productServiceOfferGroupId>
<tailoredItemId>12</tailoredItemId>
</tailoredPSO>
<tailoredPSO xmlns="">
<productServiceOfferGroupId>NCL</productServiceOfferGroupId>
<tailoredItemId>12</tailoredItemId>
</tailoredPSO>
</solutionProposal>
As can be seen, "TailoredPSO" is directly defined under "SolutionProposal" and can have a repetition of 1 til 20. The schema definition is as below.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:sp="http://agreement.pdom.nordea.com/solutionproposal/object/v2" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://agreement.pdom.nordea.com/solutionproposal/object/v2">
<xsd:element name="solutionProposal" type="sp:SolutionProposal"/>
<xsd:complexType name="SolutionProposal">
<xsd:sequence>
<xsd:element name="initiatedByCustomer" type="sp:GenericId"/>
<xsd:element name="solutionProposalId" type="sp:GenericId"/>
<xsd:element name="tailoredPSO" type="sp:TailoredPSO" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TailoredPSO">
<xsd:sequence>
<xsd:element name="productServiceOfferGroupId" type="sp:GenericId"/>
<xsd:element name="tailoredItemId" type="sp:GenericId"/>
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="GenericId">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="22"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
I have not been able to use ora:countNode expression in OBPM 11g (Patch Set 2) while trying to evaluate how many "TailoredPSO" element are there is the response. Any help will be appreciated.
Following are the various permutations I have tried out but all of them return a response of 1 only instead of expected 2.
ora:countNodes('solutionProposal','solutionProposal','//solutionProposal/tailoredPSO')
ora:countNodes('solutionProposal','//solutionProposal/tailoredPSO')
ora:countNodes('solutionProposal','//*:solutionProposal/*:tailoredPSO')
ora:countNodes('solutionProposal','TailoredPSO','//solutionProposal/tailoredPSO')
ora:countNodes('solutionProposal','tailoredPSO','//solutionProposal/tailoredPSO')
Nothing seems to return a value of 2.
Previously we have only used OBPM 10g and ALBPM 6.0 SP4 and there were other ways of working with this problem.
Thanks
Edited by: user9019487 on Jan 31, 2011 7:09 AMHi,
To access the number of nodes within a list you can do as follows:
instead of using ora:countNodes('solutionProposal','//solutionProposal/tailoredPSO') choose "simple function" instead of "XPath" and, in your case:
solutionProposal.tailoredPSO.length() will give you the size of the array you're trying to get.
Hope it helps.
Pablo -
Problem in using ora:countNodes
Hi i am trying to poll database and receive the records using receive activity.
later i am trying to count the number of record polled each time.
i am using ora:countNodes function.
But i am getting the below error :
Error while processing xpath expression, the expression is "ora:countNodes(bpws:getVariableData('Receive_Data_receive_InputVariable','EmpCollection','/ns2:EmpCollection/ns2:Emp'))", the reason is FOTY0001: type error.
Please verify the xpath query.
the schema file created by the AdapterConfigurator was:
<?xml version = '1.0' encoding = 'UTF-8'?>
<xs:schema targetNamespace="http://xmlns.oracle.com/pcbpel/adapter/db/top/DBA4GettingData" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/top/DBA4GettingData" elementFormDefault="qualified" attributeFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="EmpCollection" type="EmpCollection"/>
<xs:complexType name="EmpCollection">
<xs:sequence>
<xs:element name="Emp" type="Emp" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Emp">
<xs:sequence>
<xs:element name="empno" type="xs:int"/>
<xs:element name="ename" minOccurs="0" nillable="true"/>
<xs:element name="job" minOccurs="0" nillable="true"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
i am trying to count the nodes of EMP ...
Could you please tell me the solution...
Thanks in advance
chandraIt should look like:
ora:countNodes('Receive_Data_receive_InputVariable','EmpCollection','/ns2:EmpCollection/ns2:Emp')
I typically use the expression builder to identify the element then replace the bpws:getVariableData with ora:countNodes. Works every time. -
Not viewing links/coding issue
I used iweb08 to design a website. It always displayed fine in any web browser (ie safari or explorer etc) and a Mac or a PC could view it. When I upgraded to iweb09 only PCs seem to be able to view the links on top of the home page and Macs cannot view the links on the homepage and therefore can't move around the site.
I contacted the domain company (Hostess) and they gave me the following advice:
"The problem you are having is a coding issue. You'll have to either consult the makers of the program (Apple iLife'09) or a web developer to find the best way to resolve this issue. Different browsers (Internet Explorer, Firefox, Safari) use different methods of displaying content and depending how the content is coded, you can run into problems like this where it shows up in one browser but not another."
This would make sense to me if the PC couldn't see the links, but I don't understand why a Mac cannot view a page made on iweb and browsing in safari!
If anyone has any advice I would be more than grateful.After talking to www.hostess.com.au again the problem was suddenly fixed, although they still claimed it was a "coding issue".
-
Ora:countNodes returns always 0
1) I used a file adapter to get an xml file like
<?xml version="1.0" encoding="ISO-8859-1"?>
<dossiers>
<dossier idPlateformeIMMI="4" idPlateformeCAI="05" numeroDossierIMMI2="430106067866" dateDepot="20/02/2006" departement="92">
<telephone>
<numero></numero>
</telephone>
<convocation>
<id>306909</id>
<dateConvocation>22/03/2006 13:30</dateConvocation>
</convocation>
<adresse>
<lieuDit></lieuDit>
<numVoie>216 bis, bld Jean Jaurès</numVoie>
<batiment>chez Le Dome</batiment>
<codePostal>92100</codePostal>
<ville>BOULOGNE BILLANCOURT</ville>
</adresse>
<procedure>
<id>1</id>
</procedure>
<demandeur>
<nom>DIMWANA</nom>
<prenom>CHRIST</prenom>
<naissance>
<dateNaissance>22/05/1987</dateNaissance>
<lieuNaissance>KINSHASA</lieuNaissance>
<paysNaissance>
<id>356</id>
</paysNaissance>
</naissance>
<codeNationalite>
<id>307</id>
</codeNationalite>
<sexe>M</sexe>
<codeMatrimonial>
<id>1</id>
</codeMatrimonial>
<nomEpouse></nomEpouse>
<qualite>
<id>35</id>
</qualite>
<type>
<code>F</code>
</type>
</demandeur>
</dossier>
<dossier idPlateformeIMMI="4" idPlateformeCAI="05" numeroDossierIMMI2="430106067692" dateDepot="20/02/2006" departement="92">
<telephone>
<numero></numero>
</telephone>
<convocation>
<id>306032</id>
<dateConvocation>20/03/2006 08:30</dateConvocation>
</convocation>
<adresse>
<lieuDit></lieuDit>
<numVoie>03 rue des aubepines</numVoie>
<batiment></batiment>
<codePostal>92000</codePostal>
<ville>NANTERRE</ville>
</adresse>
<procedure>
<id>1</id>
</procedure>
<demandeur>
<nom>HMANI</nom>
<prenom>YOUSSEF</prenom>
<naissance>
<dateNaissance>23/08/1974</dateNaissance>
<lieuNaissance>seittat</lieuNaissance>
<paysNaissance>
<id>375</id>
</paysNaissance>
</naissance>
<codeNationalite>
<id>375</id>
</codeNationalite>
<sexe>M</sexe>
<codeMatrimonial>
<id>2</id>
</codeMatrimonial>
<nomEpouse></nomEpouse>
<qualite>
<id>32</id>
</qualite>
<type>
<code>F</code>
</type>
</demandeur>
</dossier>
</dossiers>
2) My xsd file is :
<schema attributeFormDefault="qualified" elementFormDefault="qualified"
targetNamespace="http://www.anaembis.org"
xmlns:doss="http://www.anaembis.org"
xmlns="http://www.w3.org/2001/XMLSchema">
<element name="dossiers" type="doss:dossiersType"/>
<complexType name="dossiersType">
<sequence>
<element name="dossier" type="doss:dossierType" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="dossierType">
<sequence>
<element name="telephone" type="doss:telephoneType"/>
<element name="convocation" type="doss:convocationType"/>
<element name="adresse" type="doss:adresseType"/>
<element name="procedure" type="doss:procedureType"/>
<element name="demandeur" type="doss:demandeurType"/>
</sequence>
<attribute name="dateDepot" use="required"/>
<attribute name="departement" use="required" type="integer"/>
<attribute name="idPlateformeCAI" use="required" type="integer"/>
<attribute name="idPlateformeIMMI" use="required" type="integer"/>
<attribute name="numeroDossierIMMI2" use="required" type="integer"/>
</complexType>
<complexType name="telephoneType">
<sequence>
<element name="numero" type="string"/>
</sequence>
</complexType>
<complexType name="convocationType">
<sequence>
<element name="id" type="string"/>
<element name="dateConvocation" type="string"/>
</sequence>
</complexType>
<complexType name="adresseType">
<sequence>
<element name="lieuDit" type="string"/>
<element name="numVoie" type="string"/>
<element name="batiment" type="string"/>
<element name="codePostal" type="string"/>
<element name="ville" type="string"/>
</sequence>
</complexType>
<complexType name="procedureType">
<sequence>
<element name="id" type="string"/>
</sequence>
</complexType>
<complexType name="demandeurType">
<sequence>
<element name="nom" type="string"/>
<element name="prenom" type="string"/>
<element name="naissance" type="doss:naissanceType"/>
<element name="codeNationalite" type="doss:codeNationaliteType"/>
<element name="sexe" type="string"/>
<element name="codeMatrimonial" type="doss:codeMatrimonialType"/>
<element name="nomEpouse" type="string"/>
<element name="qualite" type="doss:qualiteType"/>
<element name="type" type="doss:typeType"/>
</sequence>
</complexType>
<complexType name="naissanceType">
<sequence>
<element name="dateNaissance" type="string"/>
<element name="lieuNaissance" type="string"/>
<element name="paysNaissance" type="doss:paysNaissanceType"/>
</sequence>
</complexType>
<complexType name="paysNaissanceType">
<sequence>
<element name="id" type="string"/>
</sequence>
</complexType>
<complexType name="codeNationaliteType">
<sequence>
<element name="id" type="string"/>
</sequence>
</complexType>
<complexType name="codeMatrimonialType">
<sequence>
<element name="id" type="string"/>
</sequence>
</complexType>
<complexType name="qualiteType">
<sequence>
<element name="id" type="string"/>
</sequence>
</complexType>
<complexType name="typeType">
<sequence>
<element name="code" type="string"/>
</sequence>
</complexType>
</schema>
3) I get the file well but when I tried to count the number of 'dossier' with
ora:countNode('Receive_File_Read_InputVariable','dossiers','/ns3:dossiers/ns3:dossier')
I always have a result = 0
An idea ?Hi,
The problem I understood was like this....
If you are using the ora:countNodes(1,2,3) function then use only the three parameters inside and the last two is option anyway.
If you are using the count(bpws:getVariableData(1,2,3)) then make sure you use the get bpws:getVariableData function.
What the main difference is that bpws:getVarialbleData() function...
count() function works with bpws:getVariableData() function....
ora:countNodes() function will work with without bpws:getVariableData() function ... the way of using the inside three parameters is same for either ways.
All the best if it woks... It woked me always...
--Khaleel. -
ABAP coding issues after BW upgrade
Hello Gurus,
We recently did a BW upgrade from version 3.5 to 7.31 and even since have been encountering few strange issues with many of our ABAP coding.
For example, there is an APPEND statement in one of our Update Rules as below:
APPEND <lw_rtab_wa> TO <lt_rtab>.
Before upgrade, this was working as expected and the contents of <lw_rtab_wa> was getting transferred to <lt_rtab> without any issues.
Now after upgrade, we find that the contents of <lw_rtab_wa> is being clubbed together in the 1st few columns of <lt_rtab>.
Both the <lw_rtab_wa> & <lt_rtab> have the same fields, but the length of few fields in <lt_rtab> is bigger than that in <lw_rtab_wa>. For example DOC_NUMBER in <lw_rtab_wa> is of type C(10) while in <lt_rtab> it is C(20). This difference is causing the data of the 2nd field also to be over-writen in the DOC_NUMBER field of <lt_rtab>.
Please let us know if you have encountered similar situations after your BW upgrade. Any possible solutions to this would be very much appreciated as this is causing PROD issues at the moment!
Thanks
ArvindHi Arvind,
After Upgrade In BW 7.3 or higher versions All data elements that use the domain RSCHAVL are converted from CHAR60 to SSTRING. thats the reason you are getting that syntax error.
Take help of some ABAP programmer and try to change the syntax as suggested from below link.
Just scroll down and check the same. even though link shows for BW 7.4 issues, its applicable for 7.3 too. Please let me know
http://scn.sap.com/community/data-warehousing/bw/blog/2014/07/28/sap-bw-74-analysis-issues
Thanks
Ajay -
Receiving ORA-12537 TNS issue....what else can I do?
HPUX
10.2.0.3
I've started getting these errors on my database. However, nothing was being reported in my alert log. I did the research and found a bug that could cause this, with a patch. Also found that the same patch was in the 10.2.0.3 patch set.
So I updated to that patch last night. STILL getting the same errors...but now I'm getting new errors...
Wed Apr 1 09:00:14 2009
Process m000 died, see its trace file
Wed Apr 1 09:00:14 2009
ksvcreate: Process(m000) creation failed
Wed Apr 1 09:00:33 2009
Process J000 died, see its trace file
Wed Apr 1 09:00:33 2009
kkjcre1p: unable to spawn jobq slave process
Wed Apr 1 09:00:33 2009
Errors in file /opt/oracle/admin/peregrine/bdump/peregrine_cjq0_11720.trc:
So I open up the trace file...
only contents...
/opt/oracle/admin/peregrine/bdump/peregrine_cjq0_11720.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /opt/oracle/product/10.2.0/db_1
System name: HP-UX
Node name: vscdsh01
Release: B.11.23
Version: U
Machine: ia64
Instance name: peregrine
Redo thread mounted by this instance: 1
Oracle process number: 10
Unix process pid: 11720, image: oracle@vscdsh01 (CJQ0)
*** SERVICE NAME:(SYS$BACKGROUND) 2009-04-01 09:00:01.694
*** SESSION ID:(382.1) 2009-04-01 09:00:01.694
*** 2009-04-01 09:00:01.694
Process J000 is dead (pid=1288, state=3):
*** 2009-04-01 09:00:07.844
Process J000 is dead (pid=1673, state=3):
*** 2009-04-01 09:00:33.940
Process J000 is dead (pid=2201, state=3):
I looked up that string of text...googled it...came back with nothing.
How else can I investigate this ORA-12537 error? This is my production db, and it's down.
I checked the memory that one article indicated could be of issue...memory is fine.
It also mentioned versions of listener, I'm looking into that right now on how to see what version and how to update it. I'm also going to open a SR with Oracle.
Thanks.Ok...tried to log back in (no other actions taken) and it was a normal log in...that's really weird.
The db was never down...it's functional. Just some folks can't get to it. (not the same people all the time..)
show sga:
SQL> show sga
Total System Global Area 5083496448 bytes
Fixed Size 2052400 bytes
Variable Size 436211408 bytes
Database Buffers 4630511616 bytes
Redo Buffers 14721024 bytes
SQL> show parameter proces
NAME TYPE VALUE
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 10
log_archive_max_processes integer 30
processes integer 350
SQL> show parameter transaction
NAME TYPE VALUE
transactions integer 429
transactions_per_rollback_segment integer 5
excerpt from print_manifest
Kernel Configuration
The following drivers or parameters are configured into your system's
kernel. After installing HP-UX, use the sam(1m) command to configure
the following items into the kernel:
dbc_max_pct 10
vps_ceiling 64
shmmni 512
semmnu 4096
semmns 8192
semmni 4096
ninode 34816
ncsize 34816
msgseg 32767
msgmni 4096
msgtql 5000
cmc_plat_poll 15
nstrpty 60
max_thread_proc 1200
maxssiz 134217728
maxssiz_64bit 1073741824
maxuprc 3687
msgmap 4098 -
SWF Object - Redirect Coding Issue
Our firm recently completed incorporation of flash video for
client but having issues with detect/redirect javascript coding
that we could use some help on. The html coding can be reviewed by
going to:
http://www.cobioscience.com/index10.php
- Then click "View" "Source"
The javascript coding for flash movie in body portion is:
div id="flashcontent"
var so = new
SWFObject("video/biovideo2006autoplaylessbuffer.swf", "mymovie",
"419", "280", "6", "#ffffff"); so.addParam("play", "true")
so.addParam("loop", "false"); so.addParam("menu", "true");
so.addParam("quality", "autohigh"); so.addParam("base", "video");
so.setAttribute('RedirectUrl', '
http://www.cobioscience.com/index-noflash.php');
so.write("flashcontent");
The coding is taken directly from Macromedia Website but its
not totally intuitive:
http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701
Redirect coding is issue. If person doesn't have flash plugin
its suppossed to redirect to non-flash page. In this case its
index-noflash.php .Our firm recently completed incorporation of flash video for
client but having issues with detect/redirect javascript coding
that we could use some help on. The html coding can be reviewed by
going to:
http://www.cobioscience.com/index10.php
- Then click "View" "Source"
The javascript coding for flash movie in body portion is:
div id="flashcontent"
var so = new
SWFObject("video/biovideo2006autoplaylessbuffer.swf", "mymovie",
"419", "280", "6", "#ffffff"); so.addParam("play", "true")
so.addParam("loop", "false"); so.addParam("menu", "true");
so.addParam("quality", "autohigh"); so.addParam("base", "video");
so.setAttribute('RedirectUrl', '
http://www.cobioscience.com/index-noflash.php');
so.write("flashcontent");
The coding is taken directly from Macromedia Website but its
not totally intuitive:
http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=tn_12701
Redirect coding is issue. If person doesn't have flash plugin
its suppossed to redirect to non-flash page. In this case its
index-noflash.php . -
I've been following (roughly) the simple virus scanner interface that SUN provides, and adapted it into a slightly heavier weight filter that interfaces with libclamav. At first both were compiled using GCC, and I thought due to some of the weird problems I had when debugging flags were inserted, maybe Sun Studio would give better results. It hasn't, and I'm at a bit of a loss as to what to do next.
The symptom is that parts of the message just dissapear, and I see the old mime boundaries within the message body, so it seems like there's some pointer indicating where the message starts that's being corrupted by something in my code.
Interestingly, if I stop processing the message while still inside the headers, there is no problem, but that's not a very effective virus scanner if it can only look at the content type and filename of the part now is it?
This happens regardless of whether I use GCC or CC, and I'm using 0.88.1 of clamav. The output message is shown last. It should be fairly obvious what's wrong with it.
Here's my code, perhaps someone can tell me what I'm doing wrong.
** WARNING ** This IS NOT polished code, so please don't expect it to be perfect. It's clean, but includes absolute pathnames, and some other nauties that should be removed before anyone even thinks of reusing this. Once it actually works, I'll do the nessisary code cleanup, and release this to the community to do whatever anyone wants with.
Makefile
SERVER_ROOT=/opt/SUNWmsgsr
INSTALL_LOCATION=/var/opt/SUNWmsgsr/site-programs/
INCLUDE=-I${SERVER_ROOT}/include
LIBPATH=-L${SERVER_ROOT}/lib
CLAMLIBS=`/usr/local/bin/clamav-config --libs` -lclamav
CLAMFLAGS=`/usr/local/bin/clamav-config --cflags`
LIBS=-lmtasdk ${CLAMLIBS}
FLAGS=${CLAMFLAGS}
all:
cc ${FLAGS} -o msgsr_clamav msgsr_clamav.c \
${INCLUDE} ${LIBPATH} ${LIBS}
install:
cp msgsr_clamav ${INSTALL_LOCATION}
cp msgsr_clamav.cnf ${INSTALL_LOCATION}************************************************
Expansions
CLAMLIBS=-L/usr/local/lib -lz -lbz2 -lpthread -lclamav
CLAMFLAGS=-I/usr/local/include -xO4************************************************
msgsr_clamav.c
* msgsr_clamav
* Interface the Sun Java System Message Server with LibClamAV
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <pthread.h>
#include "clamav.h" // LibClamAV Header
#include "mtasdk.h"
* A structure to store channel options
typedef struct {
/* Produce debug output? */
int debug;
// Maximum size (in bytes) attachment to scan
int scan_maxsize;
// Scan recursion level
int scan_recursion_level;
// Max files
int scan_maxfiles;
// Path to ClamAV Virus Database
char db_dir[BIGALFA_SIZE+3];
// Used Internally by ClamAV. Stored here for ease of access
struct cl_node *root;
unsigned int signo;
struct cl_stat dbstat;
pthread_mutex_t reload_mutex;
// MIME types to ignore
char ignore_mime_types[BIGALFA_SIZE+3];
// Types of files to ignore
char ignore_file_types[BIGALFA_SIZE+3];
/* Unwanted MIME content types (ALWAYS stripped, never scanned) */
char bad_mime_types[BIGALFA_SIZE+3];
/* Unwanted file types (ALWAYS stripped, never scanned)*/
char bad_file_types[BIGALFA_SIZE+3];
/* Length of bmt string */
size_t bmt_len;
/* Length of bft string */
size_t bft_len;
} our_options_t;
// A structure passed per message to contain message specific data, including open files, etc.
typedef struct {
// The filename of the temp file in use so it can be unlinked when we're done with it.
char temp_file_name[BIGALFA_SIZE * 2 + 10];
// The file * to the temp file in use, so we don't have to reopen it across calls to decode_inspect
FILE *temp_file;
// A pointer to the single instance of our_options_t that is shared across all threads
our_options_t * options;
} msg_temp_data_t;
* Forward declarations
static void error_exit(int ires, const char *msg);
static void error_report(our_options_t *options, int ires, const char *func);
static void error_reports(our_options_t *options, const char* errStr, const char *func);
static int is_bad_mime_type(our_options_t *options, mta_decode_t *dctx, char *buf, size_t maxbuflen);
static int is_bad_file_type(our_options_t *options, mta_opt_t *params, const char *param_name, char *buf, size_t maxbuflen);
static int load_options(our_options_t *options);
static mta_dq_process_message_t process_message;
static mta_decode_read_t decode_read;
static mta_decode_inspect_t decode_inspect;
* main() -- Initialize the MTA SDK, load our options, and then
* start the message processing loop.
int main()
int ires,ret;
char error_msg[BIGALFA_SIZE+3];
our_options_t options;
* Initialize the MTA SDK
* See explanatory comment 1
if ((ires = mtaInit(0)))
error_exit(ires, "Unable to initialize the MTA SDK");
* Load our channel options
* See explanatory comment 2
if ((ires = load_options(&options)))
error_exit(ires, "Unable to load our channel options");
* Initialize the ClamAV Virus Engine and Database
// Preconditions to initializing the ClamAV database
options.root=NULL; options.signo=0;
// Load the virus database
mtaLog("cl_loaddbdir() loading database from %s",options.db_dir);
if ((ret = cl_loaddbdir(options.db_dir, &options.root, &options.signo)))
sprintf(error_msg,"cl_loaddbdir() error: %s", cl_strerror(ret));
error_exit(MTA_NO,error_msg);
mtaLog("cl_loaddbdir() loaded %d virus definitions",options.signo);
// Internalize the virus database structure
mtaLog("cl_build() initializing database");
if((ret = cl_build(options.root)))
sprintf(error_msg,"cl_build() error: %s", cl_strerror(ret));
error_exit(MTA_NO,error_msg);
// Keep track of database updates
memset(&options.dbstat, 0, sizeof(struct cl_stat));
cl_statinidir(options.db_dir, &options.dbstat);
// Initialize our reload mutex
if (ret = pthread_mutex_init(&options.reload_mutex,NULL))
sprintf(error_msg,"pthread_mutex_init() error: %d", ret);
error_exit(MTA_NO,error_msg);
* Now process the queued messages. Be sure to indicate a
* thread stack size sufficient to accomodate message
* enqueue processing.
* See explanatory comment 3
if ((ires = mtaDequeueStart((void *)&options,
process_message, NULL, 0)))
error_exit(ires, "Error during dequeue processing");
* All done
cl_free(options.root);
mtaDone();
return(0);
*Reloads the virus database and re-initializes the in memory structure
* Loads a new virus database, then if all succeeds, it
* swaps the new database with the old one. It's assumed
* clamav releases the database gracefully, but another mutex
* may be required if this is not the case.
static int reload_database(our_options_t *options)
struct cl_node *newroot = NULL,*oldroot;
char error_msg[BIGALFA_SIZE+3];
int ret;
unsigned int signo=0;
if (pthread_mutex_trylock(&options->reload_mutex)) { // Only one reload at a time thank you.
if(cl_statchkdir(&options->dbstat) == 1) { // Make sure we actually need an update
mtaLog("reload_database() Virus database is stale... reloading");
mtaLog("cl_loaddbdir() reloading database from %s",options->db_dir);
// Load the new virus database
if ((ret = cl_loaddbdir(options->db_dir, &newroot, &signo)))
mtaLog("cl_loaddbdir() error: %s", cl_strerror(ret));
return (-1);
mtaLog("cl_loaddbdir() loaded %d virus definitions",options->signo);
// Internalize the virus database structure
mtaLog("cl_build() re-initializing database");
if((ret = cl_build(newroot)))
mtaLog("cl_build() error: %s", cl_strerror(ret));
mtaLog("reload_database() Database reload aborted");
cl_free(newroot);
return (-2);
// Save a pointer to the old root
oldroot = options->root;
// Swap in the new root and signo
options->root = newroot;
options->signo = signo;
// Release the old root
cl_free(oldroot);
mtaLog("database_reload() Successfully loaded new virus database");
// Keep track of database updates
cl_statfree(&options->dbstat);
cl_statinidir(options->db_dir, &options->dbstat);
pthread_mutex_unlock(&options->reload_mutex);
* process_message() -- This routine is called by
* mtaDequeueStart() to process each queued
* message. We don稚 make use of ctx2, but
* ctx1 is a pointer to our channel options.
* See explanatory comment 4
static int process_message(void **ctx2, void *ctx1, mta_dq_t *dq, const char *env_from, size_t env_from_len)
const char *adr;
int disp, ires;
size_t len;
mta_nq_t *nq;
msg_temp_data_t msg_data;
* Initializations
nq = NULL;
msg_data.options = (our_options_t *)ctx1;
msg_data.temp_file = NULL;
* Check the virus database to make sure it isn't stale
* If it it's not currently reloading, and is stale, reload it.
//if(cl_statchkdir(&(msg_data.options->dbstat)) == 1)
// reload_database(msg_data.options);
* A little macro to do error checking on mta*() calls
#define CHECK(f,x) \
if ((ires = x)) { error_report(msg_data.options, ires, f); goto \
done_bad; }
* Start a message enqueue. Use the dequeue context to copy
* envelope flags fromt the current message to this new
* message being enqueued.
* See explanatory comment 5
CHECK("mtaEnqueueStart", mtaEnqueueStart(&nq, env_from, env_from_len, MTA_DQ_CONTEXT, dq, 0));
* Process the envelope recipient list
* See explanatory comment 6
while (!(ires = mtaDequeueRecipientNext(dq, &adr, &len, 0)))
* Add this envelope recipient address to the message
* being enqueued. Use the dequeue context to copy
* envelope flags for this recipient from the current
* message to the new message.
ires = mtaEnqueueTo(nq, adr, len, MTA_DQ_CONTEXT,
dq, MTA_ENV_TO, 0);
/* See explanatory comment 7 */
disp = (ires) ? MTA_DISP_DEFERRED : MTA_DISP_RELAYED;
CHECK("mtaDequeueRecipientDisposition", mtaDequeueRecipientDisposition(dq, adr, len,disp, 0));
* A normal exit from the loop occurs when
* mtaDequeueRecipientNext() returns an MTA_EOF status.
* Any other status signifies an error.
if (ires != MTA_EOF)
error_report(msg_data.options, ires, "mtaDequeueRecipientNext");
goto done_bad;
* Begin the MIME decode of the message
* See explanatory comment 8
CHECK("mtaDecodeMessage",
mtaDecodeMessage(
/* Private context is our message data structure */
(void *)&msg_data,
/* Input is the message being dequeued */
MTA_DECODE_DQ, (void *)dq,
/* Output is the message being enqueued */
MTA_DECODE_NQ, (void *)nq,
/* Inspection routine */
decode_inspect,
/* Convert non-MIME formats to MIME */
MTA_DECODE_THURMAN,
0));
* Finish the enqueue
* NOTE: IT担 IMPORTANT TO DO THIS before DOING THE
* DEQUEUE. YOU WILL LOSE MAIL IF YOU DO THE DEQUEUE FIRST
* and then THE ENQUEUE FAILS.
* See explanatory text 9
CHECK("mtaEnqueueFinish", mtaEnqueueFinish(nq, 0));
nq = NULL;
* Finish the dequeue
CHECK("mtaDequeueFinish", mtaDequeueMessageFinish(dq, 0));
* All done with this message
return(MTA_OK);
done_bad:
* Abort any ongoing enqueue or dequeue
if (nq)
mtaEnqueueFinish(nq, MTA_ABORT, 0);
if (dq)
mtaDequeueMessageFinish(dq, MTA_ABORT, 0);
* And return our error status
return(ires);
#undef CHECK
* decode_inspect() -- This is the routine that inspects each
* message part, deciding whether to accept
* or reject it.
* See explanatory comment 10
static int decode_inspect(void *ctx, mta_decode_t *dctx, int data_type,const char *data, size_t data_len)
char buf[BIGALFA_SIZE * 2 + 10];
const char *virname;
int i;
static unsigned int part_c = 1;
msg_temp_data_t *msg_data = (msg_temp_data_t *)ctx;
strncpy(buf,data,data_len);
buf[data_len] = 0;
mtaLog("decode_inspect() (%d,%ud): %s",data_type,dctx,buf);
switch (data_type)
case MTA_DATA_HEADER:
* See if the part has:
* 1. A bad MIME content-type,
* 2. A bad file name extension in the (deprecated)
* NAME= content-type parameter, or
* 3. A bad file name extension in the
* FILENAME= content-disposition parameter.
i = 0;
if ((i = is_bad_mime_type((void *)msg_data->options, dctx, buf, sizeof(buf))) ||
is_bad_file_type((void *)msg_data->options,mtaDecodeMessageInfoParams(dctx,MTA_DECODE_CTYPE_PARAMS, NULL),"NAME", buf, sizeof(buf)) ||
is_bad_file_type((void *)msg_data->options,mtaDecodeMessageInfoParams(dctx,MTA_DECODE_CDISP_PARAMS, NULL),"FILENAME", buf, sizeof(buf)))
char msg[BIGALFA_SIZE*4 + 10];
* Replace this part with a text message indicating
* that the part痴 content has been deleted.
* See explanatory comment 11
if (i)
i = sprintf(msg,
"The content of this message part has been removed.\n"
"It contained a potentially harmful media type of %.*s",
strlen(buf)-2, buf+1);
else
i = sprintf(msg,
"The content of this message part has been removed.\n"
"It contained a potentially harmful file named '%s'", buf);
mtaLog("decode_inspect(): %s",msg);
return(mtaDecodeMessagePartDelete(dctx,
MTA_REASON, msg, i,
MTA_DECODE_CTYPE, "text", 4,
MTA_DECODE_CSUBTYPE, "plain", 5,
MTA_DECODE_CCHARSET, "us-ascii", 8,
MTA_DECODE_CDISP, "inline", 6,
MTA_DECODE_CLANG, "en", 2, 0));
} break; // case MTA_DATA_HEADER:
case MTA_DATA_TEXT:
case MTA_DATA_BINARY:
if (msg_data->temp_file == NULL)
sprintf(msg_data->temp_file_name,"/tmp/%i.tmp",part_c++);
mtaLog("messageDecode(): Opening Temp File %s",msg_data->temp_file_name);
msg_data->temp_file = fopen(msg_data->temp_file_name,"wb");
fwrite(data,data_len,1,msg_data->temp_file);
return(MTA_OK);
break;
case MTA_DATA_NONE:
fflush(msg_data->temp_file);
fclose(msg_data->temp_file);
msg_data->temp_file = NULL;
struct cl_limits limits;
memset(&limits, 0, sizeof(struct cl_limits));
/* maximal number of files in archive */;
limits.maxfiles = 1000;
/* maximal archived file size */
limits.maxfilesize = 10 * 1048576; /* 10 MB */
/* maximal recursion level */
limits.maxreclevel = 5;
/* maximal compression ratio */
limits.maxratio = 200;
/* disable memory limit for bzip2 scanner */
limits.archivememlim = 0;
i = cl_scanfile(msg_data->temp_file_name, &virname, NULL, msg_data->options->root,&limits,CL_SCAN_STDOPT);
unlink (msg_data->temp_file_name);
if(i == CL_VIRUS) {
char msg[BIGALFA_SIZE*4 + 10];
size_t idlen;
i = sprintf(msg,
"The content of this message part has been removed.\n"
"It contained the virus %s in a file named '%s'", virname,buf);
mtaDequeueInfo(dctx,MTA_ENV_ID,&buf,&idlen);
buf[idlen] = '\0';
mtaLog("decode_inspect(): Detected %s virus in part %i of msg ID %s",virname,0,buf);
return(mtaDecodeMessagePartDelete(dctx,
MTA_REASON, msg, i,
MTA_DECODE_CTYPE, "text", 4,
MTA_DECODE_CSUBTYPE, "plain", 5,
MTA_DECODE_CCHARSET, "us-ascii", 8,
MTA_DECODE_CDISP, "inline", 6,
MTA_DECODE_CLANG, "en", 2, 0));
} else {
if(i != CL_CLEAN)
mtaLog("decode_inspect() Error: %s scanning file %s",cl_strerror(i),msg_data->temp_file_name);
else
mtaLog("decode_inspect(): Part in file %s is clean",msg_data->temp_file_name);
//return(mtaDecodeMessagePartCopy(dctx, 0));
return(MTA_OK); break;
return(MTA_OK);
* is_bad_mime_type() -- See if the part痴 media type is in our
* bad MIME content types, for example:
* application/vbscript
* See explanatory comment 13
static int is_bad_mime_type(our_options_t *options,
mta_decode_t *dctx, char *buf,
size_t maxbuflen)
const char *csubtype, *ctype;
size_t i, len1, len2;
char *ptr;
* Sanity checks
if (!options || !options->bmt_len ||
!options->bad_mime_types[0] ||
!dctx)
return(0);
* Get the MIME content type
ctype = mtaDecodeMessageInfoString(dctx, MTA_DECODE_CTYPE,NULL, &len1);
csubtype = mtaDecodeMessageInfoString(dctx,MTA_DECODE_CSUBTYPE,NULL, &len2);
* Build the string: <0x01>type/subtype<0x01><0x00>
ptr = buf;
*ptr++ = (char)0x01;
for (i = 0; i < len1; i++)
*ptr++ = tolower(*ctype++);
*ptr++ = '/';
for (i = 0; i < len2; i++)
*ptr++ = tolower(*csubtype++);
*ptr++ = (char)0x01;
*ptr = '\0';
* Now see if the literal just built occurs in the list of
* bad MIME content types
return((strstr(options->bad_mime_types, buf)) ? -1 : 0);
* is_bad_file_type() -- See if the part has an associated file
* name whose file extension is in our list
* of bad file names, such as .vbs.
* See explanatory comment 14
static int is_bad_file_type(our_options_t *options,
mta_opt_t *params,
const char *param_name, char *buf,
size_t maxbuflen)
const char *ptr1;
char fext[BIGALFA_SIZE+2], *ptr2;
size_t i, len;
* Sanity checks
if (!options || !options->bft_len || !params || !param_name)
return(0);
len = 0;
buf[0] = '\0';
if (mtaOptionString(params, param_name, 0, buf, &len,
maxbuflen - 1) ||
!len || !buf[0])
* No file name parameter specified
return(0);
* A file name parameter was specified. Parse it to
* extract the file extension portion, if any.
ptr1 = strrchr(buf, '.');
if (!ptr1)
* No file extension specified
return(0);
* Now store the string created earlier in fext[]
* Note that we drop the ・・from the extension.
ptr1++; /* Skip over the ・・*/
ptr2 = fext;
*ptr2++ = (char)0x01;
len = len - (ptr1 - buf);
for (i = 0; i < len; i++)
*ptr2++ = tolower(*ptr1++);
*ptr2++ = (char)0x01;
*ptr2++ = '\0';
* Now return -1 if the string occurs in
* options->bad_file_types.
return((strstr(options->bad_file_types, fext)) ? -1 : 0);
* load_options() -- Load our channel options from the channel痴
* option file
* See explanatory comment 15
static int load_options(our_options_t *options)
char buf[BIGALFA_SIZE+1];
size_t buflen, i;
mta_opt_t *channel_opts;
int ires;
const char *ptr0;
char *ptr1;
* Initialize the our private channel option structure
memset(options, 0, sizeof(our_options_t));
* Set internal defaults for important features
options->scan_maxsize = 10 * 1024 * 1024; // 10 MB
options->scan_recursion_level = 10;
options->scan_maxfiles = 200;
strcpy(options->db_dir,cl_retdbdir()); // Default ClamAV Directory
* Access the channel痴 option file
* See explanatory comment 16
channel_opts = NULL;
if ((ires = mtaOptionStart(&channel_opts, "/var/opt/SUNWmsgsr/site-programs/msgsr_clamav.cnf", 0, 0)))
mtaLog("Unable to access our channel option file");
return(ires);
* DEBUG=0|1
options->debug = 0;
mtaOptionInt(channel_opts, "DEBUG", 0, &options->debug);
if (options->debug)
mtaDebug(MTA_DEBUG_SDK, 0);
* BAD_MIME_TYPES=type1/subtype1[,type2/subtype2[,...]]
buf[0] = '\0';
mtaOptionString(channel_opts, "BAD_MIME_TYPES", 0, buf,
&buflen, sizeof(buf));
* Now translate the comma separated list:
* Type1/Subtype1[,Type2/Subtype2[,...]]
* to
*<0x01>type1/subtype1[<0x01>type2/subtype2[<0x01>...]]<0x01>
ptr0 = buf;
ptr1 = options->bad_mime_types;
*ptr1++ = (char)0x01;
for (i = 0; i < buflen; i++)
if (*ptr0 != ',')
*ptr1++ = tolower(*ptr0++);
else
*ptr1++ = (char)0x01;
ptr0++;
*ptr1++ = (char)0x01;
*ptr1 = '\0';
options->bmt_len = ptr1 - options->bad_mime_types;
* BAD_FILE_TYPES=["."]Ext1[,["."]Ext2[,...]]
buf[0] = '\0';
buflen = 0;
mtaOptionString(channel_opts, "BAD_FILE_TYPES", 0, buf,
&buflen, sizeof(buf));
* Now translate the comma separated list:
* ["."]Ext1[,["."]Ext2[,...]]
* to
* <0x01>ext1[<0x01>ext2[<0x01>...]]<0x01>
ptr0 = buf;
ptr1 = options->bad_file_types;
*ptr1++ = (char)0x01;
for (i = 0; i < buflen; i++)
switch(*ptr0)
default : /* copy after translating to lower case */
*ptr1++ = tolower(*ptr0++);
break;
case '.' : /* discard */
break;
case ',' : /* end current type */
*ptr1++ = (char)0x01;
ptr0++;
break;
*ptr1++ = (char)0x01;
*ptr1 = '\0';
options->bft_len = ptr1 - options->bad_file_types;
* Dispose of the mta_opt_t context
* See explanatory comment 17
mtaOptionFinish(channel_opts);
* And return a success
return(MTA_OK);
* error_report() ・Report an error condition when debugging is
* enabled.
static void error_report(our_options_t *options, int ires,
const char *func)
if (options->debug)
mtaLog("%s() returned %d; %s",
(func ? func : "?"), ires, mtaStrError(ires,0));
static void error_reports(our_options_t *options, const char* errStr,
const char *func)
if (options->debug)
mtaLog("%s() reported: %s",
(func ? func : "?"), errStr);
* error_exit() -- Exit with an error status and error message.
static void error_exit(int ires, const char *msg)
mtaLog("%s%s%s", (msg ? msg : ""), (msg ? "; " : ""),
mtaStrError(ires,0));
exit(1);
msgsr_clamav.cnf
DEBUG=1
BAD_MIME_TYPES=application/vbscript
BAD_FILE_TYPES=bat,pif,vb,vbs,chs,exe************************************************
broken message
Return-path: <[email protected]>
Received: from virusscan-daemon.apple.california.com by apple.california.com
(Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005))
id <[email protected]> for [email protected]; Thu,
20 Apr 2006 07:30:13 -0700 (PDT)
Received: from california.com ([209.159.129.16])
by apple.california.com (Sun Java System Messaging Server 6.2-3.04 (built Jul
15 2005)) with ESMTP id <[email protected]> for
[email protected]; Thu, 20 Apr 2006 07:30:05 -0700 (PDT)
Received: from [61.23.221.222] by apple.california.com (mshttpd); Thu,
20 Apr 2006 14:30:05 +0000 (GMT)
Content-return: allowed
Date: Thu, 20 Apr 2006 14:30:05 +0000 (GMT)
From: [email protected]
Subject: Re: testing
In-reply-to: <[email protected]>
To: [email protected]
Message-id: <[email protected]>
MIME-version: 1.0
X-Mailer: Sun Java(tm) System Messenger Express 6.2-3.04 (built Jul 15 2005)
Content-type: multipart/alternative;
boundary="Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)"
Content-language: en
X-Accept-Language: en
Priority: normal
References: <[email protected]>
Original-recipient: rfc822;[email protected]
This is a multi-part message in MIME format.
--Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
Content-type: text/plain; charset=us-ascii
Content-transfer-encoding: 7bit
Content-disposition: inline
Data is missing from here
----ec04832708e231d6e2f
--Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
Content-type: text/html; charset=us-ascii
Content-transfer-encoding: quoted-printable
Content-disposition: inline
Data is missing from here
nal Message -----=3Cbr=3EFrom=3A chales=40california=2Ecom=3Cbr=3EDate=3A=
Thursday=2C April 20=2C 2006 11=3A19 pm=3Cbr=3ESubject=3A testing=3Cbr=3E=
To=3A chales=40california=2Ecom=3Cbr=3E=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B 1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B=
3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B 5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B=
7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B 9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B=
1=3Cbr=3E=26gt=3B 2=3Cbr=3E=26gt=3B 3=3Cbr=3E=26gt=3B 4=3Cbr=3E=26gt=3B=
5=3Cbr=3E=26gt=3B 6=3Cbr=3E=26gt=3B 7=3Cbr=3E=26gt=3B 8=3Cbr=3E=26gt=3B=
9=3Cbr=3E=26gt=3B 0=3Cbr=3E=26gt=3B =3Cbr=3E=26gt=3B
----ec04832708e231d6e2f
--Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)
Content-type: text/x-vcard; name=chales.vcf; charset=us-ascii
Content-transfer-encoding: base64
Content-disposition: attachment; filename=chales.vcf
Content-description: Card for <[email protected]>
bA0KdGVsO3dvcms6NTEwLTI4Ny04NDUwDQp1cmw6aHR0cDovL3d3dy5jYWxpZm9ybmlh
LmNvbS8NCm9yZzpDYWxpZm9ybmlhQ29tLCBJbmM7DQp2ZXJzaW9uOjIuMQ0KZW1haWw7
aW50ZXJuZXQ6Y2hhbGVzQGNhbGlmb3JuaWEuY29tDQp0aXRsZTpTeXN0ZW0gQWRtaW5p
c3RyYXRvcg0KZW5kOnZjYXJkDQo=
----ec04832708e231d6e2f--
Boundary_(ID_iOVR4MBjhWJn/mh7Ij+BUQ)Ok, so it's not my code. Using the virus_scanner_simple.c example from SUN, if you change the decode_inspect routine to return MTA_OK for every call (which should technically just let the message pass) it has the same behavior as my program. (Not all that suprising since mine is a derivative of said program)
That said, this now looks like a library issue. I'm using Sun Java System Messaging Server 6.2-3.04 (built Jul 15 2005) according to the SMTP prompt, and was wondering if perhaps I should apply:
http://sunsolve.sun.com/search/document.do?assetkey=1-21-118207-42-1&searchclause=6306404
The issue seems to be in the mtaDecodeMessage function, and occurs when the decode_inspect function is allowed to parse the message body, not just the message headers.
The machine is a Sun Ultra 4500 running Solaris 10. Here's the banner:
SunOS cookie 5.10 Generic_118822-23 sun4u sparc SUNW,Ultra-Enterprise
Has anyone else had similar problems using the MTA SDK? Is there anything I'm missing here (besides the above mentioned patch) that might fix this? -
Is there an up-to-date forum for email coding issues?
There's a lot of info online but these issues change almost monthly with new webmail "features" that tend to break old format rules. Is there an ongoing discussion group for this? Or is there a Dreamweaver email perfect plugin?
Also, does the Outlook 2007 validator (made for Dreamweaver 8 it says) work in CS5? If so, how do you find it in the Validator in Dreamweaver?
CharlesI installed the Dreamweaver Outlook 2007 validator but I found an immediate problem with it. I tried validating an en email that I built from a template that I was given by a client which has the font style only in the body tag. It validates the code as being perfect. It may validate perfectly but the template doesn't work in Outlook 2007 because the font style is not inline. A working code validator that would report problems in different email clients would be brilliant - but it would have to be continually updated. Just last month Yahoo launched a new version of its online webmail which already has caused problems for me (such as tables mysteriously separating which doesn't appear anywhere else). Articles are OK but the problem is requirements are always changing.
Charles I agree with a lot of what you are saying and from my personal experience I don't even worry about Lotus Notes anymore because of the low volume of recipients. It is true what you are saying though about Outlook and inline styles, but Microsoft has been pretty consistent since the change in 2007 with the "Word Rendering Engine". You should be able to easily modify the client's email though with the font so that it is inline and renders, not that it should be a big concern because you are very limited in the fonts you use unless you are doing emails for a company like Panic which targets Mac & mobile users, all of which have clients that allow CSS3 effects in emails. It's very good to see their optimism with the way the rest of world looks at email.
The problem with Constant Contact and Mail Chimp are that they are commercial blasting companys. I can't use them for our clients - we have to code and blast the emails ourself.
This is a very dangerous practice and I don't understand what why that wouldn't work for your clients? If it's sensitive content there are other email providers who can do that sort of thing if you give more industry specifics. The part that would worry me as an outside contractor is that the client needs to know up front, if they send spam, their server is done for. Your hosting provider for the mail server could shut you down, the ISPs could blacklist you and it would affect the everyday email traffic and not just the promotional email pieces that you send out.
And I will say this about Mailchimp. I did find consistent results using their templates with the exception of their footer, which I did write to them about. I've noticed some issues with some !important tags not being read correctly in Outlook 2010. But other than that, the service was good, and I did try to learn their template language for some custom emails, but then someone had a change of mind about services so I never saw it through. -
Adobe Edge Animate JavaScript Coding issues/page load time speeds
To let you have an idea of my skill set I have a background in animation and design and have been taking classes in web development. My question is about how to create an interactive website that loads various animation depending on the user's choice and current place within the Adobe Edge Animate timeline. The website I developed for a client @ www.goshowpro.com works but loads slower than I want and doesn't format properly on my client's Macbook (I believe he needs to update his browsers but that is something else.)
So as you can see from looking at my website I used a multitude of HTML files to create my vision of an interactive website based off of a theatrical stage. I know this is not an ideal method. I would prefer to have it all on one page but I am having trouble with my javascript coding. I was wondering if there would be away to expedite my current site's load time and if not if you could look at my NEW coding. (This IS NOT the current coding on the site.)
if = "hstop" "chomstop" "shomstop" "phomstop"
{sym.play("hporstart")};
else = "hconstop" "sconstop" "pconstop"
{sym.play("cporstart")};
else = "hserstop" "cserstop" "pserstop"
{sym.play("sporstart")};
It looks crappy but I'm trying to learn so don't laugh too much. Thanks again.
MichaelHi, Marlene-
We currently bundle jQuery 1.7.1 with the Animate runtime. In order to call fadeOut() on the element newSquare, you would do the following:
sym.$("newSquare").fadeOut();
OR
sym.getSymbol("newSquare").getSymbolElement().fadeOut();
Hope that helps!
-Elaine -
Illustrator SVG Effects Coding Issues
I am having some REAL big problems coding SVG XML and having it being reproduced in Illustrator as I am expecting. Major problem right now is the feColorMatrix effect. I understand the effect and how the matrix changes the pixels but problem I am having is that when I specify 0.5 as the final output result on any of the color channel rows, Illustrator is not interpreting 0.5 as RGB 127, in other words, 50% the color value. It is more like 0.215 equates to 127 RGB decimal. Here is some code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns="http://www.w3.org/2000/svg"
version="1.2"
viewBox="0 0 576 432"
width="576"
height="432"
baseProfile="tiny"
id="NicoleLovesSVG">
<g id="Canvas">
<rect
width="576"
height="432"
x="0"
y="0"
transform="scale(1,1)"
id="Canvas-Rect1"
style="fill:#9d8654;fill-rule:evenodd;" />
</g>
<defs>
<filter id="ShadowFilter-Text1" filterUnits="objectBoundingBox" primitiveUnits="userSpaceOnUse" width="200%" height="200%" x="-50%" y="-50%">
<feColorMatrix type="matrix" in="SourceAlpha"
values="0 0 0 0 .5
0 0 0 0 0
0 0 0 0 0
0 0 0 1 0"/>
<feOffset dx="24.395183950936" dy="24.395183950936" result="shadow"/>
<feBlend in="SourceGraphic" in2="shadow" mode="normal"/>
</filter>
</defs>
<g
id="Text1"
transform="translate(1.1272727272727,297.27272727273) rotate(0) scale(3.5238813920454546,2.642911044034091)"
style="fill:#003300;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:15px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1;"
filter="url(#ShadowFilter-Text1)">
<g
id="Text1-Line1"
transform="translate(0,0)">
<path
transform="translate(0,0)"
vector-effect="non-scaling-stroke"
id="Text1-Line1-Glyph1"
d="M 0,0 M 46.4,-98.24 L 46.4,-15.68 C 46.4,-8.96 47.466666666667,-3.7333333333333 49.6,-0 L 30.4,-0 C 32.533333333333,-3.7333333333333 33.6,-8.96 33.6,-15.68 L 33.6,-98.24 L 31.36,-98.24 C 21.653333333333,-98.24 12.106666666667,-96.373333333333 2.72,-92.64 L 8.32,-106.72 L 79.68,-106.72 L 74.56,-92.64 C 68.693333333333,-96.48 59.306666666667,-98.346666666667 46.4,-98.24 z" />
</g>
</g>
</svg>
As you can see, the first filter retrieves the SourceAlpha which is all black. Then the color matrix takes that and does this on the first row of the matrix:
(a x red) + (b x green) + (c x blue) + (d x alpha) + e = final red output
plugging in the numbers:
(0 x 0) + (0 x 0) + (0 x 0) + (0 x 0) + 0.5 = 0.5
Should be 50% red! Or 127 RGB!!! I did the math and in Illy it is more like 0.215 = 127 = 50% ??????This has been answered: http://stackoverflow.com/questions/8214924/illustrator-svg-effects-coding-issues
Maybe you are looking for
-
Clicking noise from new Toshiba Satellite laptop?
I have a Toshiba Satellite C55-A5195 (Windows 7 Home Premium). It was bought brand new around 3 weeks ago. I've noticed that, besides the fan noise, the bottom of the laptop makes a clicking or buzzing noise. The laptop has blue screened twice, somet
-
My N80 just have a hearing problem. When I call someone or someone call me, I cannot hear the sound from the handset. But if I connect the bluetooth or use the loudspeaker, it's work. Is this the problem with the handset speaker or any problem in N80
-
Problem with ID after upgraded of Iphone 4
I had some issued with all the pics on my Iphone, and decided to updrage to the last version. After the upgrade, the IPhone with Itunes asked me for the ID. But I gave the wrong ID and now the Iphone is bloked. Even my ID is blocked and going to be d
-
Just trying to get any behaviors to work. Even created a new page, set some text, and added "open browser window" as a behavior, and nothing happens, no rollover hand nothing. Im kind of new to Dreamweaver so not sure if im missing something obvious?
-
I live in ethiopia I am using a BB 8100 and my opera mini Works just fine my problem is this when I (while using the opera mini browser) click the link to download google maps the default blackberry browser automatically starts up and I then get the