Struts 2.3 ignores wildcard actions - regex

I'm setting up an application that uses Struts 2.3 and Tiles 2. Some pages will be heavily Struts driven (e.g. lots of CRUD) while others will be simple, static HTML/JSP pages. I want to set up some actions that handle specific functionality and send all other URLs to a default action, which will check to see if the appropriate static page exists based on the supplied path. If not, a 404 error or some such will be generated instead.
In struts.xml, I have applied a basic configuration that appears like it should work; however, Struts seems to ignore the wildcard action. The non-wildcard actions work just fine.
Here's the struts.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!--
You could also set the constants in the struts.properties file
placed in the same directory as struts.xml
-->
<constant name="struts.devMode" value="true" />
<!-- <constant name="struts.mapper.class" value="rest" /> -->
<constant name="struts.action.extension" value="," />
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
<!--
<constant name="struts.convention.action.suffix" value="Controller"/>
<constant name="struts.convention.action.mapAllMatches" value="true"/>
<constant name="struts.convention.default.parent.package" value="rest-default"/>
<constant name="struts.convention.package.locators" value="rest"/>
-->
<package name="base" extends="tiles-default" abstract="yes">
<result-types>
<result-type name="tiles" default="true" class="org.apache.struts2.views.tiles.TilesResult" />
<result-type name="json" class="org.apache.struts2.json.JSONResult"/>
</result-types>
<interceptors>
<interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
<!-- <interceptor name="requestConstants" class="com.ibm.gbs.vdp.constants.ConstantsInterceptor" /> -->
<interceptor-stack name="mainStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="json" />
<!-- <interceptor-ref name="session" /> -->
<!-- <interceptor-ref name="requestConstants" /> -->
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="mainStack" />
<global-results>
<result name="login" type="tiles">login</result>
</global-results>
</package>
<!-- package start -->
<package name="main" extends="base" namespace="/">
<action name="login">
<result type="tiles">login</result>
</action>
<action name="logout" class="com.gswt.common.action.LogoutAction">
<result name="success">login</result>
</action>
<action name="*" class="com.installation.action.PageAction">
<result type="tiles">standard-page</result>
</action>
</package>
<!-- package end -->
<!-- package start -->
<package name="licenses" extends="base" namespace="/licenses">
</package>
<!-- package end -->
<!-- package start -->
<package name="checklists" extends="base" namespace="/checklists">
</package>
<!-- package end -->
<!-- package start -->
<package name="error" extends="base" namespace="/error">
<action name="404">
<result type="tiles">error-404</result>
</action>
</package>
<!-- package end -->
</struts>
And here's an example of the error I receive:
There is no Action mapped for namespace [/] and action name [page] associated with context path []. - [unknown location]
com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:185)
org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:63)
org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39)
com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:58)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:553)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:125)
com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:80)
com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908)
com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:997)
com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.invokeFilters(DefaultExtensionProcessor.java:1079)
com.ibm.ws.webcontainer.extension.DefaultExtensionProcessor.handleRequest(DefaultExtensionProcessor.java:999)
com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3954)
com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276)
com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:945)
com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1592)
com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:191)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:453)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:515)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:306)
com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:277)
com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1049)
com.ibm.ws.ssl.channel.impl.SSLConnectionLink$MyReadCompletedCallback.complete(SSLConnectionLink.java:643)
com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1784)
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175)
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138)
com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)
com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775)
com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905)
com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1656)
What am I missing or doing wrong?

Since you are using advanced wildcards then your action name should be a valid regex expression to match the configuration.
Like so
<action name="{.*}" class="com.installation.action.PageAction">
<result type="tiles">standard-page</result>
</action>

Related

Import failure using the Vendor invoice V2 composite data entity (VendInvoiceV2Entity) in Dynamics 365 (D365) for Finance & Operations

I am trying to import vendor invoice using the composite data entity "Vendor invoice V2" data entity (VendInvoiceV2Entity), but I am getting the following error:
Package execution failed please check event log in DMF service box
'0' 'Vendor invoice V2' record(s) inserted in staging
I am using the following file for import:
<?xml version="1.0" encoding="utf-8"?>
<Document>
<VENDORINVOICEHEADERENTITY>
<HEADERREFERENCE>VT01-002123</HEADERREFERENCE>
<APPROVEPOSTINGWITHMATCHINGDISCREPANCIES>0</APPROVEPOSTINGWITHMATCHINGDISCREPANCIES>
<APPROVERPERSONNELNUMBER>000001</APPROVERPERSONNELNUMBER>
<BANKACCOUNT />
<BUSINESSDOCUMENTSUBMISSIONID_W>00000000-0000-0000-0000-000000000000</BUSINESSDOCUMENTSUBMISSIONID_W>
<CASHDISCOUNT>0.000000</CASHDISCOUNT>
<CASHDISCOUNTCODE />
<CASHDISCOUNTDATE>1900-01-01T00:00:00+00:00</CASHDISCOUNTDATE>
<CHARGESGROUP />
<COMMENT_ />
<CURRENCY>USD</CURRENCY>
<DATE>2022-06-02T00:00:00+00:00</DATE>
<DELIVERYNAME>New address created from PO</DELIVERYNAME>
<DIMENSIONDISPLAYVALUE />
<DISCOUNTPERCENTAGE>0.000000</DISCOUNTPERCENTAGE>
<DOCUMENTNUMBER />
<DUEDATE>2022-07-02T00:00:00+00:00</DUEDATE>
<ENDDATETIME>1900-01-01T00:00:00+00:00</ENDDATETIME>
<EXCHANGERATE>100.0000000000000000</EXCHANGERATE>
<FIXEDRATE>0</FIXEDRATE>
<HEADERONLYIMPORT>0</HEADERONLYIMPORT>
<IGNORECALCULATEDSALESTAX>0</IGNORECALCULATEDSALESTAX>
<IMPORTEDAMOUNT>0.000000</IMPORTEDAMOUNT>
<IMPORTEDSALESTAX>0.000000</IMPORTEDSALESTAX>
<INVOICEACCOUNT>000509</INVOICEACCOUNT>
<INVOICEDATE>1900-01-01T00:00:00+00:00</INVOICEDATE>
<INVOICEDESCRIPTION />
<INVOICEGROUP />
<INVOICENUMBER />
<INVOICEPAYMENTRELEASEDATE>1900-01-01T00:00:00+00:00</INVOICEPAYMENTRELEASEDATE>
<INVOICERECEIVEDDATE>2022-06-02T00:00:00+00:00</INVOICERECEIVEDDATE>
<INVOICEROUNDOFF>0.000000</INVOICEROUNDOFF>
<ISAPPROVED>1</ISAPPROVED>
<ISBATCH>1</ISBATCH>
<ISONHOLD>0</ISONHOLD>
<ISPRICESINCLUDESALESTAX>0</ISPRICESINCLUDESALESTAX>
<LOG />
<METHODOFPAYMENT />
<NUMBERSEQUENCEGROUP />
<OVERRIDESALESTAX>0</OVERRIDESALESTAX>
<PACKINGSLIPRANGE />
<PAYMENTGROUPCODE />
<PAYMENTID />
<PAYMENTSCHEDULE />
<PAYMENTSPECIFICATION />
<PORT />
<POSTINGPROFILE />
<PSNBANKACCOUNTID />
<PSNCARDHOLDERNAME />
<PSNCARDNUMBERDIGITS />
<PSNPOSTINGDEFINITIONCODE />
<PSNPURCHASINGCARDTRANSACTIONTYPE>0</PSNPURCHASINGCARDTRANSACTIONTYPE>
<PSNREFERENCEINVOICENUMBER />
<PSNVENDORACCOUNTFORBALANCEPAYOFF />
<PURCHIDRANGE />
<RECALCULATION>1</RECALCULATION>
<RELEASEDATECOMMENT />
<REPORTINGCURRENCYEXCHANGERATE>100.0000000000000000</REPORTINGCURRENCYEXCHANGERATE>
<SALESTAXGROUP />
<SALESTAXROUNDING>0.000000</SALESTAXROUNDING>
<SECONDARYEXCHANGERATE>0.0000000000000000</SECONDARYEXCHANGERATE>
<SETTLEVOUCHER>0</SETTLEVOUCHER>
<SITE />
<STARTDATETIME>1900-01-01T00:00:00+00:00</STARTDATETIME>
<STATISTICSPROCEDURE />
<TAXEXEMPTNUMBER />
<TERMSOFPAYMENT />
<TOTALDISCOUNT>0.000000</TOTALDISCOUNT>
<TRANSACTIONCODE />
<TRANSPORT />
<TRIANGULATION>0</TRIANGULATION>
<VARIANCEAPPROVEDDATETIME>1900-01-01T00:00:00+00:00</VARIANCEAPPROVEDDATETIME>
<VARIANCEPERSONNELNUMBER>000001</VARIANCEPERSONNELNUMBER>
<VENDORACCOUNT>000509</VENDORACCOUNT>
<VENDORINVOICEREVIEWSTATUS>0</VENDORINVOICEREVIEWSTATUS>
<VENDORINVOICETYPE>0</VENDORINVOICETYPE>
<VENDORNAME>MY XYZ VENDOR</VENDORNAME>
<VENDORREQUESTEDWORKEREMAIL>shakir.shabbir52#gmail.com</VENDORREQUESTEDWORKEREMAIL>
<WAREHOUSE />
<VENDORINVOICELINEENTITY>
<HEADERREFERENCE>VT01-002123</HEADERREFERENCE>
<INVOICELINENUMBER>1.0000000000000000</INVOICELINENUMBER>
<ACCOUNTINGDISTRIBUTIONTEMPLATEID />
<AMOUNT>0.000000</AMOUNT>
<BUDGETRESERVATIONDOCUMENTNUMBER />
<BUDGETRESERVATIONLINENUMBER>0</BUDGETRESERVATIONLINENUMBER>
<CHANGEQUANTITYMANUALLY>0</CHANGEQUANTITYMANUALLY>
<CHARGESONPURCHASES>0.000000</CHARGESONPURCHASES>
<CLOSEFORRECEIPT>0</CLOSEFORRECEIPT>
<COMMODITY />
<CURRENCY>USD</CURRENCY>
<CWDELIVERYREMAINDER>0.000000</CWDELIVERYREMAINDER>
<CWREMAININGQUANTITY>0.000000</CWREMAININGQUANTITY>
<CWUPDATE>0.000000</CWUPDATE>
<DATAAREACOMPANY />
<DELIVERYNAME>New address created from PO</DELIVERYNAME>
<DELIVERYSTATE />
<DIMENSIONDISPLAYVALUE />
<DIMENSIONNUMBER>#00000001500031DB</DIMENSIONNUMBER>
<DISCOUNT>0.000000</DISCOUNT>
<DISCOUNTPERCENT>0.000000</DISCOUNTPERCENT>
<INVENTNOW>3000.000000</INVENTNOW>
<INVENTORYSITEID>1001</INVENTORYSITEID>
<INVENTORYWAREHOUSEID>1001.255</INVENTORYWAREHOUSEID>
<INVOICEACCOUNT>000509</INVOICEACCOUNT>
<ISTAX1099GTRADEORBUSINESSINCOME>0</ISTAX1099GTRADEORBUSINESSINCOME>
<ISTAX1099SPROPERTYORSERVICES>0</ISTAX1099SPROPERTYORSERVICES>
<ITEMBATCHNUMBER />
<ITEMNAME>My Item name</ITEMNAME>
<ITEMNUMBER>100018</ITEMNUMBER>
<ITEMSALESTAX />
<LINEDESCRIPTION />
<LINENUMBER>1.0000000000000000</LINENUMBER>
<LINETYPE>0</LINETYPE>
<MAINACCOUNTDISPLAYVALUE />
<MULTILINEDISCOUNT>0.000000</MULTILINEDISCOUNT>
<MULTILINEDISCOUNTPERCENTAGE>0.000000</MULTILINEDISCOUNTPERCENTAGE>
<NETAMOUNT>65.610000</NETAMOUNT>
<ORDEREDINVENTORYSTATUSID />
<ORIGCOUNTRYREGIONID />
<ORIGINALDELIVERREMAINDER>3000.000000</ORIGINALDELIVERREMAINDER>
<OVERRIDESALESTAX>0</OVERRIDESALESTAX>
<PARTYID />
<PERCENTAGE>0.000000</PERCENTAGE>
<PORT />
<PRICEUNIT>1.000000000000</PRICEUNIT>
<PROCUREMENTCATEGORYHIERARCHYNAME>Main</PROCUREMENTCATEGORYHIERARCHYNAME>
<PROCUREMENTCATEGORYNAME>Lab Supplies</PROCUREMENTCATEGORYNAME>
<PRODUCTCOLORID />
<PRODUCTCONFIGURATIONID />
<PRODUCTSIZEID />
<PRODUCTSTYLEID />
<PURCHASEORDER>VT01-000741</PURCHASEORDER>
<PURCHLINENUMBER>1</PURCHLINENUMBER>
<RECEIVENOW>3.000000</RECEIVENOW>
<RELEASEALLRETAINEDAMOUNT>0</RELEASEALLRETAINEDAMOUNT>
<REMAINAFTER>0.000000</REMAINAFTER>
<REMAINAFTERINVENT>0.000000</REMAINAFTERINVENT>
<REMAINBEFOREINVENT>3000.000000</REMAINBEFOREINVENT>
<RETAINAGEAMOUNT>0.000000</RETAINAGEAMOUNT>
<RETAINPERCENTAGE>0.000000</RETAINPERCENTAGE>
<SALESTAXGROUP />
<STATEOFORIGIN />
<STATISTICSPROCEDURE />
<TAX1099AMOUNT>0.000000</TAX1099AMOUNT>
<TAX1099BOX />
<TAX1099GSTATETAXWITHHELDAMOUNT>0.000000</TAX1099GSTATETAXWITHHELDAMOUNT>
<TAX1099GTAXYEAR>0</TAX1099GTAXYEAR>
<TAX1099GVENDORSTATEID />
<TAX1099GVENDORSTATETAXID />
<TAX1099SADDRESSORLEGALDESCRIPTION />
<TAX1099SBUYERPARTOFREALESTATETAXAMOUNT>0.000000</TAX1099SBUYERPARTOFREALESTATETAXAMOUNT>
<TAX1099STATEAMOUNT>0.000000</TAX1099STATEAMOUNT>
<TAX1099TYPE>0</TAX1099TYPE>
<TAXWITHHOLDGROUP />
<TAXWITHHOLDITEMGROUPNAME />
<TRANSACTIONCODE />
<TRANSPORT />
<UNIT />
<UNITPRICE>21.870000</UNITPRICE>
<VENDORACCOUNT>000509</VENDORACCOUNT>
<VENDORINVOICELINEREVIEWSTATUS>0</VENDORINVOICELINEREVIEWSTATUS>
<WITHHOLDINGTAXGROUP />
</VENDORINVOICELINEENTITY>
</VENDORINVOICEHEADERENTITY>
</Document>
I checked the "Event log" as well, but did not get any useful information
TLDR;
The issue of the question is probably caused by a data issue and not by a bug in the import/export framework logic. Without having access to an environment with that data, there is probably little that can be provided in terms of an answer to the specific issue of the question. But here are some general pointers on how to further analyze the issue.
Creating a working baseline
In general, when setting up an import for a complex entity like Vendor Invoice V2, I recommend the following process:
First, manually create a few data samples in the system (in this case, a pending vendor invoice). The samples should be entered with the same data that you expect from the import.
Second, create an export project and export the data samples. This will give you a template file that you can use for the import.
Third, create the import project with the template file.
Check that the import works with the template file. You should delete the sample data first to make sure the import creates new records instead of updating them.
Modify a copy of the template file to include additional import data. Import that modified copy.
Steps 1-4 are important to establish a working base line. The bulk of the work will probably be step 5. Usually, at this step, numerous issues with the import data are uncovered.
Working Contoso sample and additional ideas
Following this process, I was able to set up a working import on a 10.0.28 environment with Contoso demo data in the USMF legal entity. See below for the xml data that I used.
While testing this and when comparing my xml data with the one from the question, I noticed the following issues that may be worth investigating:
During setup of the import project, the mapping was first shown with a red x symbol. This was due to the unmapped field COMMENT_, which only seems to be supported for export, but not import. I removed it from the mapping and the red x was gone.
The xml data in the question has a field PURCHASEORDER in the line data, but the field is missing in the header data.
A couple of fields in my xml data have values, while the xml data of the question does not, and vice versa. Nothing obvious was jumping out at me for causing issues. But I recommend reviewing the import data carefully for any issues.
Working sample data:
<?xml version="1.0" encoding="utf-8"?>
<Document>
<VENDORINVOICEHEADERENTITY>
<HEADERREFERENCE>012222</HEADERREFERENCE>
<APPROVEPOSTINGWITHMATCHINGDISCREPANCIES>0</APPROVEPOSTINGWITHMATCHINGDISCREPANCIES>
<APPROVERPERSONNELNUMBER>000020</APPROVERPERSONNELNUMBER>
<BANKACCOUNT />
<BUSINESSDOCUMENTSUBMISSIONID_W>00000000-0000-0000-0000-000000000000</BUSINESSDOCUMENTSUBMISSIONID_W>
<CASHDISCOUNT>0.000000</CASHDISCOUNT>
<CASHDISCOUNTCODE>0.5%D10</CASHDISCOUNTCODE>
<CASHDISCOUNTDATE>1900-01-01T00:00:00+01:00</CASHDISCOUNTDATE>
<CHARGESGROUP />
<COMMENT_ />
<CURRENCY>USD</CURRENCY>
<DATE>2022-06-15T00:00:00+02:00</DATE>
<DELIVERYNAME>Contoso Entertainment System USA</DELIVERYNAME>
<DIMENSIONDISPLAYVALUE>001--</DIMENSIONDISPLAYVALUE>
<DISCOUNTPERCENTAGE>0.500000</DISCOUNTPERCENTAGE>
<DOCUMENTNUMBER />
<DUEDATE>2022-07-15T00:00:00+02:00</DUEDATE>
<ENDDATETIME>1900-01-01T00:00:00+01:00</ENDDATETIME>
<EXCHANGERATE>100.0000000000000000</EXCHANGERATE>
<FIXEDRATE>0</FIXEDRATE>
<HEADERONLYIMPORT>0</HEADERONLYIMPORT>
<IGNORECALCULATEDSALESTAX>0</IGNORECALCULATEDSALESTAX>
<IMPORTEDAMOUNT>0.000000</IMPORTEDAMOUNT>
<IMPORTEDSALESTAX>0.000000</IMPORTEDSALESTAX>
<INVOICEACCOUNT>1001</INVOICEACCOUNT>
<INVOICEDATE>1900-01-01T00:00:00+01:00</INVOICEDATE>
<INVOICEDESCRIPTION />
<INVOICEGROUP />
<INVOICENUMBER>4711</INVOICENUMBER>
<INVOICEPAYMENTRELEASEDATE>1900-01-01T00:00:00+01:00</INVOICEPAYMENTRELEASEDATE>
<INVOICERECEIVEDDATE>1900-01-01T00:00:00+01:00</INVOICERECEIVEDDATE>
<INVOICEROUNDOFF>0.000000</INVOICEROUNDOFF>
<ISAPPROVED>1</ISAPPROVED>
<ISBATCH>0</ISBATCH>
<ISONHOLD>0</ISONHOLD>
<ISPRICESINCLUDESALESTAX>0</ISPRICESINCLUDESALESTAX>
<LOG />
<METHODOFPAYMENT>CHECK</METHODOFPAYMENT>
<NUMBERSEQUENCEGROUP />
<OVERRIDESALESTAX>0</OVERRIDESALESTAX>
<PACKINGSLIPRANGE />
<PAYMENTGROUPCODE />
<PAYMENTID />
<PAYMENTSCHEDULE />
<PAYMENTSPECIFICATION />
<PORT />
<POSTINGPROFILE>GEN</POSTINGPROFILE>
<PSNBANKACCOUNTID />
<PSNCARDHOLDERNAME />
<PSNCARDNUMBERDIGITS />
<PSNPOSTINGDEFINITIONCODE />
<PSNPURCHASINGCARDTRANSACTIONTYPE>0</PSNPURCHASINGCARDTRANSACTIONTYPE>
<PSNREFERENCEINVOICENUMBER />
<PSNVENDORACCOUNTFORBALANCEPAYOFF />
<PURCHASEORDERNUMBER />
<PURCHIDRANGE />
<RECALCULATION>1</RECALCULATION>
<RELEASEDATECOMMENT />
<REPORTINGCURRENCYEXCHANGERATE>100.0000000000000000</REPORTINGCURRENCYEXCHANGERATE>
<SALESTAXGROUP />
<SALESTAXROUNDING>0.000000</SALESTAXROUNDING>
<SECONDARYEXCHANGERATE>0.0000000000000000</SECONDARYEXCHANGERATE>
<SETTLEVOUCHER>0</SETTLEVOUCHER>
<SITE />
<STARTDATETIME>1900-01-01T00:00:00+01:00</STARTDATETIME>
<STATISTICSPROCEDURE />
<TAXEXEMPTNUMBER />
<TERMSOFPAYMENT>Net30</TERMSOFPAYMENT>
<TOTALDISCOUNT>0.000000</TOTALDISCOUNT>
<TRANSACTIONCODE />
<TRANSPORT />
<TRIANGULATION>0</TRIANGULATION>
<VARIANCEAPPROVEDDATETIME>1900-01-01T00:00:00+01:00</VARIANCEAPPROVEDDATETIME>
<VARIANCEPERSONNELNUMBER>000020</VARIANCEPERSONNELNUMBER>
<VENDORACCOUNT>1001</VENDORACCOUNT>
<VENDORINVOICEREVIEWSTATUS>0</VENDORINVOICEREVIEWSTATUS>
<VENDORINVOICETYPE>0</VENDORINVOICETYPE>
<VENDORNAME>Acme Office Supplies</VENDORNAME>
<VENDORREQUESTEDWORKEREMAIL>julia#contoso.com</VENDORREQUESTEDWORKEREMAIL>
<WAREHOUSE />
<VENDORINVOICELINEENTITY>
<HEADERREFERENCE>012222</HEADERREFERENCE>
<INVOICELINENUMBER>1.0000000000000000</INVOICELINENUMBER>
<ACCOUNTINGDISTRIBUTIONTEMPLATEID />
<ADJUSTEDUNITPRICE>0.000000</ADJUSTEDUNITPRICE>
<AMOUNT>0.000000</AMOUNT>
<BUDGETRESERVATIONDOCUMENTNUMBER />
<BUDGETRESERVATIONLINENUMBER>0</BUDGETRESERVATIONLINENUMBER>
<CHANGEQUANTITYMANUALLY>0</CHANGEQUANTITYMANUALLY>
<CHARGESONPURCHASES>0.000000</CHARGESONPURCHASES>
<CLOSEFORRECEIPT>0</CLOSEFORRECEIPT>
<COMMODITY />
<CURRENCY>USD</CURRENCY>
<CWDELIVERYREMAINDER>0.000000</CWDELIVERYREMAINDER>
<CWREMAININGQUANTITY>0.000000</CWREMAININGQUANTITY>
<CWUPDATE>0.000000</CWUPDATE>
<DATAAREACOMPANY />
<DELIVERYNAME>Site 1</DELIVERYNAME>
<DELIVERYSTATE />
<DIMENSIONDISPLAYVALUE>001--</DIMENSIONDISPLAYVALUE>
<DIMENSIONNUMBER>000252</DIMENSIONNUMBER>
<DISCOUNT>0.000000</DISCOUNT>
<DISCOUNTPERCENT>0.000000</DISCOUNTPERCENT>
<INVENTNOW>0.000000</INVENTNOW>
<INVENTORYSITEID>1</INVENTORYSITEID>
<INVENTORYWAREHOUSEID>13</INVENTORYWAREHOUSEID>
<INVOICEACCOUNT>1001</INVOICEACCOUNT>
<ISTAX1099GTRADEORBUSINESSINCOME>0</ISTAX1099GTRADEORBUSINESSINCOME>
<ISTAX1099SPROPERTYORSERVICES>0</ISTAX1099SPROPERTYORSERVICES>
<ITEMBATCHNUMBER />
<ITEMNAME>Microsoft Natural Keyboard Elite / Microsoft Natural Keyboard Elite</ITEMNAME>
<ITEMNUMBER>C0001</ITEMNUMBER>
<ITEMSALESTAX>ALL</ITEMSALESTAX>
<LINEDESCRIPTION>Microsoft Natural Keyboard Elite</LINEDESCRIPTION>
<LINENUMBER>0.0000000000000000</LINENUMBER>
<LINETYPE>0</LINETYPE>
<MAINACCOUNTDISPLAYVALUE />
<MULTILINEDISCOUNT>0.000000</MULTILINEDISCOUNT>
<MULTILINEDISCOUNTPERCENTAGE>0.000000</MULTILINEDISCOUNTPERCENTAGE>
<NETAMOUNT>39.950000</NETAMOUNT>
<ORDEREDINVENTORYSTATUSID />
<ORIGCOUNTRYREGIONID />
<ORIGINALDELIVERREMAINDER>0.000000</ORIGINALDELIVERREMAINDER>
<OVERRIDESALESTAX>0</OVERRIDESALESTAX>
<PARTYID />
<PDSCALCULATIONID />
<PERCENTAGE>0.000000</PERCENTAGE>
<PORT />
<PRICEUNIT>1.000000000000</PRICEUNIT>
<PROCUREMENTCATEGORYHIERARCHYNAME>Procurement - Office Supplies</PROCUREMENTCATEGORYHIERARCHYNAME>
<PROCUREMENTCATEGORYNAME>Computers</PROCUREMENTCATEGORYNAME>
<PRODUCTCOLORID>Black</PRODUCTCOLORID>
<PRODUCTCONFIGURATIONID />
<PRODUCTSIZEID />
<PRODUCTSTYLEID />
<PURCHASEORDER />
<PURCHLINENUMBER>0</PURCHLINENUMBER>
<RECEIVENOW>1.000000</RECEIVENOW>
<RELEASEALLRETAINEDAMOUNT>0</RELEASEALLRETAINEDAMOUNT>
<REMAINAFTER>0.000000</REMAINAFTER>
<REMAINAFTERINVENT>0.000000</REMAINAFTERINVENT>
<REMAINBEFORE>0.000000</REMAINBEFORE>
<REMAINBEFOREINVENT>0.000000</REMAINBEFOREINVENT>
<RETAINAGEAMOUNT>0.000000</RETAINAGEAMOUNT>
<RETAINPERCENTAGE>0.000000</RETAINPERCENTAGE>
<SALESTAXGROUP />
<STATEOFORIGIN />
<STATISTICSPROCEDURE />
<TAX1099AMOUNT>0.000000</TAX1099AMOUNT>
<TAX1099BOX />
<TAX1099GSTATETAXWITHHELDAMOUNT>0.000000</TAX1099GSTATETAXWITHHELDAMOUNT>
<TAX1099GTAXYEAR>0</TAX1099GTAXYEAR>
<TAX1099GVENDORSTATEID />
<TAX1099GVENDORSTATETAXID />
<TAX1099SADDRESSORLEGALDESCRIPTION />
<TAX1099SBUYERPARTOFREALESTATETAXAMOUNT>0.000000</TAX1099SBUYERPARTOFREALESTATETAXAMOUNT>
<TAX1099STATEAMOUNT>0.000000</TAX1099STATEAMOUNT>
<TAX1099TYPE>0</TAX1099TYPE>
<TAXWITHHOLDGROUP />
<TAXWITHHOLDITEMGROUPNAME />
<TOTALRETAINEDAMOUNT>0.000000</TOTALRETAINEDAMOUNT>
<TRANSACTIONCODE />
<TRANSPORT />
<UNIT>ea</UNIT>
<UNITPRICE>39.950000</UNITPRICE>
<VENDORACCOUNT>1001</VENDORACCOUNT>
<VENDORINVOICELINEREVIEWSTATUS>0</VENDORINVOICELINEREVIEWSTATUS>
<WITHHOLDINGTAXGROUP />
</VENDORINVOICELINEENTITY>
</VENDORINVOICEHEADERENTITY>
</Document>

How to define Decison table in DMN

How to define a Decision table in DMN designer such that,
This is one of the standard decisions : If claim amount is >10000 then hradmin approval =Y otherwise hradmin approval=N
In DMN,
a Decision table in DMN designer such that [...] If claim amount is >10000 then hradmin approval =Y otherwise hradmin approval=N
can be modeled as the following DRG for 1 InputData named claim amount and 1 Decision for the table named hradmin approval:
The hradmin approval decision table can be defined as follows:
The screenshot also shows sample data, matching your original requirements.
You can download the .dmn example here: https://kiegroup.github.io/kogito-online/?file=https://gist.githubusercontent.com/tarilabs/f9655e2f8a2c4253e66ce661e5c79879/raw/so69764028.dmn#/editor/dmn
You can save the xml to a text file, upload it, try it out and modify it here: https://consulting.camunda.com/dmn-simulator/
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/" xmlns:dmndi="https://www.omg.org/spec/DMN/20191111/DMNDI/" xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/" xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/" xmlns:camunda="http://camunda.org/schema/1.0/dmn" id="dinnerDecisions" name="HR Approval Decision" namespace="http://camunda.org/schema/1.0/dmn" exporter="Camunda Modeler" exporterVersion="4.0.0">
<decision id="beverages" name="HR Approval">
<informationRequirement id="InformationRequirement_1xvojck">
<requiredInput href="#InputData_0pgvdj9" />
</informationRequirement>
<decisionTable id="DecisionTable_07q05jb">
<input id="InputClause_0bo3uen" label="Amount" camunda:inputVariable="">
<inputExpression id="LiteralExpression_0d6l79o" typeRef="integer">
<text>amount</text>
</inputExpression>
</input>
<output id="OuputClause_99999" label="HR Approval" name="hrApproval" typeRef="boolean" />
<rule id="row-506282952-7">
<description></description>
<inputEntry id="UnaryTests_0jb8hau">
<text>>10000</text>
</inputEntry>
<outputEntry id="LiteralExpression_1kr45vj">
<text>true</text>
</outputEntry>
</rule>
<rule id="DecisionRule_05oqdbw">
<description></description>
<inputEntry id="UnaryTests_1vcdz6c">
<text><=10000</text>
</inputEntry>
<outputEntry id="LiteralExpression_0g5cscd">
<text>false</text>
</outputEntry>
</rule>
</decisionTable>
</decision>
<inputData id="InputData_0pgvdj9" name="Amount" />
<dmndi:DMNDI>
<dmndi:DMNDiagram id="DMNDiagram_0i21c0s">
<dmndi:DMNShape id="DMNShape_0a1lk6d" dmnElementRef="beverages">
<dc:Bounds height="80" width="180" x="430" y="130" />
</dmndi:DMNShape>
<dmndi:DMNEdge id="DMNEdge_1czaglz" dmnElementRef="InformationRequirement_1xvojck">
<di:waypoint x="500" y="287" />
<di:waypoint x="520" y="230" />
<di:waypoint x="520" y="210" />
</dmndi:DMNEdge>
<dmndi:DMNShape id="DMNShape_0aea4xy" dmnElementRef="InputData_0pgvdj9">
<dc:Bounds height="45" width="125" x="437" y="287" />
</dmndi:DMNShape>
</dmndi:DMNDiagram>
</dmndi:DMNDI>
</definitions>

How to call a RESTFul web service with a parameter that has a "dot" inside

I developed a RESTFul service but I am having problems when I want to pass a parameter that has a dot in it. I tried encoding the URL, replacing the dot by %2E, but the end point is not found. When I remove the dot, the end point is found, so it is obvious that something is wrong with the dot.
for example, this request works:
http://localhost:9999/SvcLipigas.svc/AlmacenaPedido/229188562/16122016/2030/123456/CILINDRO%2015%20KGCODIGAS/2/14000/15/19122016/1514/19122016/1000
But this other one does not:
http://localhost:9999/SvcLipigas.svc/AlmacenaPedido/229188562/16122016/2030/123456/CILINDRO%2015%20KG%2ECODIGAS/2/14000/15/19122016/1514/19122016/1000
Notice the dot in the "CILINDRO%2015%20KG%2ECODIGAS" parameter.
Any help will be appreciated.
Currently, as a patch, I am sending the dot replaced by a pipe character, and in the service, I am replacing it back to the dot, but this is a very ugly solution.
EDIT:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped,
UriTemplate = "AlmacenaPedido/{telefono}/{fechaPedido}/{horaPedido}/{codigoInterno}/{descripcionProducto}/{cantidadProducto}/{valorUnitario}/{kilosProducto}/{fechaEntrega}/{horaEntrega}/{fechaDespacho}/{horaDespacho}")]
int AlmacenaPedido(string telefono, string fechaPedido, string horaPedido, string codigoInterno, string descripcionProducto,
string cantidadProducto, string valorUnitario, string kilosProducto, string fechaEntrega, string horaEntrega,
string fechaDespacho, string horaDespacho);
EDIT: This is the full web.config file
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="WS_PedidoCliente.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<appSettings>
<add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
</appSettings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" relaxedUrlToFileSystemMapping="true" />
</system.web>
<system.serviceModel>
<services>
<service name="WS_PedidoCliente.SvcLipigas" behaviorConfiguration="serviceBehavior">
<endpoint address=""
binding="webHttpBinding"
contract="WS_PedidoCliente.ISvcLipigas"
bindingNamespace="http://ws.lipigas.cl"
behaviorConfiguration="web"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="serviceBehavior">
<!-- To avoid disclosing metadata information, set the values below to false before deployment -->
<serviceMetadata httpGetEnabled="true" />
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="web">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
<protocolMapping>
<add scheme="http" binding="webHttpBinding"/>
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<!--
To browse web app root directory during debugging, set the value below to true.
Set to false before deployment to avoid disclosing web app folder information.
-->
<directoryBrowse enabled="true" />
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v12.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="LipigasEntities" connectionString="metadata=res://*/Model.Lipigas.csdl|res://*/Model.Lipigas.ssdl|res://*/Model.Lipigas.msl;provider=Oracle.DataAccess.Client;provider connection string="DATA SOURCE=SLLCOSTO;PASSWORD=uni_1915sll;USER ID=PEDIDO"" providerName="System.Data.EntityClient" />
</connectionStrings>
<applicationSettings>
<WS_PedidoCliente.Properties.Settings>
<setting name="Usuario" serializeAs="String">
<value>EMDITEC</value>
</setting>
</WS_PedidoCliente.Properties.Settings>
</applicationSettings>
</configuration>
This is a limitation of IIS.
It is treating the dot (encoded or not) as an extension.
Try adding
<httpRuntime relaxedUrlToFileSystemMapping="true" />
to the web.config

In modelglue event use different view files based on conditions/results

Following is a event handler used in a xml file in config folder.
<event-handler name="survey.completioninf">
<broadcasts>
<message name="checkLogin">
<argument name="role" value="suadmin,manager" />
</message>
<message name="getPrograms" />
</broadcasts>
<results>
<result name="NotLoggedIn" do="user.login" redirect="true" />
<result name="NotAuthorized" do="user.notauthorized" redirect="true" />
<result do="view.template" />
</results>
<views>
<include name="body" template="survey/completioninf.cfm" />
</views>
</event-handler>
Is there any way I can include a different view file based on a result value or attribute?
I need to keep the event name consistent.
You can create a new result for each include you need (based on result value or attribute). If you set redirect="false" then it will stay under your survey.completioninf event name. Basically this event becomes a filter and redirects to the appropriate include silently.
<event-handler name="survey.completioninf">
<broadcasts>
<message name="checkLogin">
<argument name="role" value="suadmin,manager" />
</message>
<message name="getPrograms" />
</broadcasts>
<results>
<result name="NotLoggedIn" do="user.login" redirect="true" />
<result name="NotAuthorized" do="user.notauthorized" redirect="true" />
<!-- Add your new results here and redirect to the desired events -->
<result name="SurveyIsNotComplete" do="survey.ContinueSurvey" redirect="false">
<result name="SurveyIsComplete" do="survey.CompletedSurvey" redirect="false">
</results>
</event-handler>
<!-- You will need to create new events to handle these results -->
<event-handler name="survey.CompletedSurvey">
<broadcasts>
<message name="checkLogin">
<argument name="role" value="suadmin,manager" />
</message>
<message name="getPrograms" />
</broadcasts>
<results>
<result name="NotLoggedIn" do="user.login" redirect="true" />
<result name="NotAuthorized" do="user.notauthorized" redirect="true" />
<result do="view.template" />
</results>
<views>
<include name="body" template="survey/completioninf.cfm" />
</views>
</event-handler>
<event-handler name="survey.ContinueSurvey">
<broadcasts>
<message name="checkLogin">
<argument name="role" value="suadmin,manager" />
</message>
<message name="getPrograms" />
</broadcasts>
<results>
<result name="NotLoggedIn" do="user.login" redirect="true" />
<result name="NotAuthorized" do="user.notauthorized" redirect="true" />
<result do="view.template" />
</results>
<views>
<include name="body" template="survey/continueSurvey.cfm" />
</views>
</event-handler>

Browser is not working in my Blackberry Simulator

I am working on developing Blackberry application using PhoneGap framwork. I have executed the sample app using below link
http://wiki.phonegap.com/w/page/31930982/Getting%20Started%20with%20PhoneGap%20BlackBerry%20WebWorks
But browser is not working in my Simulator.I mean if I try to goto Google site I am getting below error
I tried following steps too
1)I have installed 'BlackBerry Email and MDS Services Simulators 4.1.2'
2)Run the MDS and Run my application
Even I am getting issue. Please advice!
Device details:
Windows OS,PhoneGap,BlackBerry Email and MDS Services Simulators 4.1.2,Simulator:9550,BlackBerry WebWorks SDK 2.3.1.5
Config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Widget Configuration Reference:
http://docs.blackberry.com/en/developers/deliverables/15274/
-->
<widget xmlns="http://www.w3.org/ns/widgets"
xmlns:rim="http://www.blackberry.com/ns/widgets"
version="1.0.0.0">
<name>Corperate Directory</name>
<access subdomains="false" uri="http://www.google.com"/>
<description>
A sample application written with Cordova.
</description>
<license href="http://opensource.org/licenses/alphabetical">
</license>
<!-- Cordova API -->
<feature id="blackberry.system" required="true" version="1.0.0.0" />
<feature id="org.apache.cordova" required="true" version="1.0.0" />
<feature id="blackberry.find" required="true" version="1.0.0.0" />
<feature id="blackberry.identity" required="true" version="1.0.0.0" />
<feature id="blackberry.pim.Address" required="true" version="1.0.0.0" />
<feature id="blackberry.pim.Contact" required="true" version="1.0.0.0" />
<feature id="blackberry.io.file" required="true" version="1.0.0.0" />
<feature id="blackberry.utils" required="true" version="1.0.0.0" />
<feature id="blackberry.io.dir" required="true" version="1.0.0.0" />
<feature id="blackberry.app" required="true" version="1.0.0.0" />
<feature id="blackberry.app.event" required="true" version="1.0.0.0" />
<feature id="blackberry.system.event" required="true" version="1.0.0.0"/>
<feature id="blackberry.widgetcache" required="true" version="1.0.0.0"/>
<feature id="blackberry.media.camera" />
<feature id="blackberry.ui.dialog" />
<!-- Cordova API -->
<access subdomains="true" uri="file:///store/home" />
<access subdomains="true" uri="file:///SDCard" />
<!-- Expose access to all URIs, including the file and http protocols -->
<access subdomains="true" uri="*" />
<icon rim:hover="false" src="resources/icon.png" />
<icon rim:hover="true" src="resources/icon.png" />
<rim:loadingScreen backgroundColor="#CFCFCF"
foregroundImage="resources/loading_foreground.png"
onFirstLaunch="true">
<rim:transitionEffect type="fadeOut" />
</rim:loadingScreen>
<content src="index.html" />
<rim:permissions>
<rim:permit>use_camera</rim:permit>
<rim:permit>read_device_identifying_information</rim:permit>
<rim:permit>access_shared</rim:permit>
<rim:permit>read_geolocation</rim:permit>
</rim:permissions>
</widget>
You probably need to whitelist google.com in your config.xml:
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets"
xmlns:rim="http://www.blackberry.com/ns/widgets"
version="1.0.0.0">
<name>commonPitfalls</name>
<access subdomains="false" uri="http://www.google.com"/>
</widget>
From: http://supportforums.blackberry.com/t5/Web-and-WebWorks-Development/Common-BlackBerry-WebWorks-development-pitfalls-that-can-be/ta-p/624712
Alternatively, instead of checking google.com, you could use the connection api that PhoneGap offers:
http://docs.phonegap.com/en/1.8.0/cordova_connection_connection.md.html#Connection
Or use an xhr to google.com (with the appropriate whitelisting in your config.xml) to see if you get a response that way instead of loading in a page.