I'm trying to get process start variables via rest, but I can't receive any start variable.
When i try:
http://192.168.30.1:8080/engine-rest/process-definition/key/invoice/form-variables
I got only this:
{}
How to get process start variables?
Thats because the resource Get Start Form Variables only supports Generated Start Forms.
The invoice process uses Embedded Start Form. The start event of the invoice process references an external HTML file, which is used to render the Start form.
See here:
<startEvent id="StartEvent_1" name="Invoice
received" camunda:formKey="embedded:app:forms/start-form.html">
<outgoing>SequenceFlow_1</outgoing>
</startEvent>
If you want to receive the start form variables, the start event of the process must be look like the following example:
<startEvent id="start">
<extensionElements>
<camunda:formData>
<camunda:formField id="stringField" label="String Field" type="string" defaultValue="someString">
<camunda:validation>
<camunda:constraint name="maxlength" config="10" />
<camunda:constraint name="minlength" config="5" />
</camunda:validation>
</camunda:formField>
<camunda:formField id="longField" label="Long Field" type="long" defaultValue="5">
<camunda:validation>
<camunda:constraint name="max" config="10" />
<camunda:constraint name="min" config="3" />
</camunda:validation>
</camunda:formField>
<camunda:formField id="customField" label="Custom Field" type="string">
<camunda:validation>
<camunda:constraint name="validator" config="org.camunda.bpm.engine.test.api.form.CustomValidator" />
</camunda:validation>
</camunda:formField>
<camunda:formField id="dateField" label="Date Field" type="date" defaultValue="10/01/2013" />
</camunda:formData>
</extensionElements>
</startEvent>
See here for the complete example process.
In that case the FormService can resolve the form variables and the request will return the defined variables.
Related
Is there a way to load a .xaml file data, filter the tags, and check values?
For instance, using the bellow code, how can I get all 'variable' tags and check if is 'String'and check if the value contains come specific keyword (using c/c++)?
Thank you
<Flowchart.Variables>
<Variable x:TypeArguments="x:String" Name="strDebugDt" />
<Variable x:TypeArguments="x:String" Name="strMailFilter" />
<Variable x:TypeArguments="sd:DataTable" Name="dtReportAttachments" />
</Flowchart.Variables>
I am in the process of updating my Bug template in TFS 2013 via the Process Editor tool in Visual Studio.
I'm attempting to only display an additional field when a specific choice is selected from one of the drop-down menus. We require individuals filing bugs to select the environment in which the bug was found, i.e., Development, Test, Staging, Production. I want an additional string field to display when "Production" is selected from the Environment drop-down menu. I also want this field to be required when "Production" is selected before the item can be saved.
I'm sure this is easy to do, but, I just can't figure it out.
Any help would be fantastic, thank you!
You can have the XML of Environment field looks like:
<FieldDefinition name="EnvironmentCustom" refname="env.field" type="String">
<ALLOWEDVALUES expanditems="true">
<LISTITEM value="Development" />
<LISTITEM value="Test" />
<LISTITEM value="Staging" />
<LISTITEM value="Production" />
</ALLOWEDVALUES>
</FieldDefinition>
And make the XML of additional field looks like:
<FieldDefinition name="VarCustom" refname="var.field" type="String">
<WHEN field="env.field" value="Production">
<REQUIRED />
<ALLOWEDVALUES expanditems="true">
<LISTITEM value="good" />
<LISTITEM value="bad" />
</ALLOWEDVALUES>
</WHEN>
</FieldDefinition>
In this way, you'll see Environment field has a drop down with values "Development", "Test", "Staging", "Production", and additional field has a drop down with values "good", "bad". Once you select "Production" in Environment field, the additional field will become Required, you'll have to select a vlue for additional field before saving this work item type.
Adding:
If you don't want to a drop down under the additional field, you can remove the ALLOWEDVALUES rule, then you can type any string in it. The XML looks like:
<FieldDefinition name="VarCustom" refname="var.field" type="String">
<WHEN field="env.field" value="Production">
<REQUIRED />
</WHEN>
</FieldDefinition>
It's not able to hide/un-hide VarCustom field by using Rules, you need to customize your own work item control to achieve your requirement. You can check the links and examples about custom work item control at website below:
https://witcustomcontrols.codeplex.com/
I have integrated active directory module with sitecore, I am able to see the users from ad in sitecore user manager. Now i want to verify if the ad user can login to sitecore. I assigned sitecore\Sitecore Client Users role for the user and tried to login as
Username: domain\username
Password: pw
I see a wierd error when login button is hit. Below is the error.
But when i check the set as administrator check box for this user, i am able to login with
Username: domain\username
Password: pw
Any help is appreciated.
Thanks.
Server Error in '/' Application.
Creating an instance of the COM component with CLSID {080D0D78-F421-11D0-A36E-00C04FB950DC} from the IClassFactory failed due to the following error: 800401e4 Invalid syntax (Exception from HRESULT: 0x800401E4 (MK_E_SYNTAX)).
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Runtime.InteropServices.COMException: Creating an instance of the COM component with CLSID {080D0D78-F421-11D0-A36E-00C04FB950DC} from the IClassFactory failed due to the following error: 800401e4 Invalid syntax (Exception from HRESULT: 0x800401E4 (MK_E_SYNTAX)).
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[COMException (0x800401e4): Creating an instance of the COM component with CLSID {080D0D78-F421-11D0-A36E-00C04FB950DC} from the IClassFactory failed due to the following error: 800401e4 Invalid syntax (Exception from HRESULT: 0x800401E4 (MK_E_SYNTAX)).]
System.Web.Security.DirectoryInformation.GetADsPath(String dn) +108
System.Web.DataAccess.ActiveDirectoryConnectionHelper.GetDirectoryEntry(DirectoryInformation directoryInfo, String objectDN, Boolean revertImpersonation) +42
System.Web.Security.ActiveDirectoryMembershipProvider.ValidateUserCore(String username, String password) +1970
System.Web.Security.ActiveDirectoryMembershipProvider.ValidateUser(String username, String password) +39
LightLDAP.SitecoreADMembershipProvider.ValidateUser(String username, String password) +193
Sitecore.Data.DataProviders.NullRetryer.Execute(Func`1 action, Action recover) +394
Sitecore.Security.SitecoreMembershipProvider.ValidateUser(String username, String password) +319
System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +105
System.Web.UI.WebControls.Login.AttemptLogin() +160
System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +93
System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +84
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3804
I came across similar issue for my one of my web app.
If you are still facing this problem, you can fix this by going to Advanced Settings of the IIS App pool of your application and setting "Load User Profile" option to True.
#MattGartman here are the membership and role poviders
<membership defaultProvider="sitecore" hashAlgorithmType="SHA1">
<providers>
<clear />
<add name="sitecore" type="Sitecore.Security.SitecoreMembershipProvider, Sitecore.Kernel" realProviderName="switcher" providerWildcard="%" raiseEvents="true" />
<add name="sql" type="System.Web.Security.SqlMembershipProvider" connectionStringName="core" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="256" />
<add name="switcher" type="Sitecore.Security.SwitchingMembershipProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/membership" />
<add name="ad" type="LightLDAP.SitecoreADMembershipProvider" connectionStringName="ADConnString" applicationName="sitecore" minRequiredPasswordLength="1" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" connectionUsername="domain\username" connectionPassword="pw" connectionProtection="Secure" attributeMapUsername="sAMAccountName" enableSearchMethods="true" customFilter="(memberOf=CN=RegionsComSitecore,OU=Groups,DC=c,DC=pk,DC=com)" />
</providers>
</membership>
<roleManager defaultProvider="sitecore" enabled="true">
<providers>
<clear />
<add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true" />
<add name="sql" type="System.Web.Security.SqlRoleProvider" connectionStringName="core" applicationName="sitecore" />
<add name="switcher" type="Sitecore.Security.SwitchingRoleProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/roleManager" />
<add name="ad" type="LightLDAP.SitecoreADRoleProvider" connectionStringName="ADConnString" applicationName="sitecore" username=" domain\username" password="pw" attributeMapUsername="sAMAccountName" cacheSize="2MB" customFilter="(memberOf=CN=RegionsComSitecore,OU=Groups,DC=c,DC=pk,DC=com)" />
</providers>
</roleManager>
here is the ldap.config
<pipelines>
<initializeAdUserEntry>
<!--
Use the processor if all new user should have a predefiled value in a property.
The PropertyName parameter defines the name of the property.
The DefaultValue parameter defines the default value of the property.
-->
<!--
<processor type="LightLDAP.Pipelines.InitializeAdEntry.SetPropertyValue, LightLDAP">
<PropertyName desc="AD property name ">type the property name here</PropertyName>
<DefaultValue desc="AD property name ">type the default property value here</DefaultValue>
</processor>
-->
<!--
Use the processor if all new roles should be a member of the predefined role.
The RoleName parameter defines the name of the main role.
-->
<!--
<processor type="LightLDAP.Pipelines.InitializeAdEntry.AddToRole, LightLDAP">
<RoleName desc="AD group">type role name here</RoleName>
</processor>
-->
<processor type="LightLDAP.Pipelines.InitializeAdEntry.CommitChanges, LightLDAP"/>
</initializeAdUserEntry>
<initializeAdRoleEntry>
<!--
Use the processor if all new user should have a predefiled value in a property.
The PropertyName parameter defines the name of the property.
The DefaultValue parameter defines the default value of the property.
-->
<!--
<processor type="LightLDAP.Pipelines.InitializeAdEntry.SetPropertyValue, LightLDAP">
<PropertyName desc="AD property name ">type the property name here</PropertyName>
<DefaultValue desc="AD property value ">type the default property value here</DefaultValue>
</processor>
-->
<!--
Use the processor if all new roles should be a member of the predefined role.
The RoleName parameter defines the name of the main role.
-->
<!--
<processor type="LightLDAP.Pipelines.InitializeAdEntry.AddToRole, LightLDAP">
<RoleName desc="AD group">type role name here</RoleName>
</processor>
-->
<processor type="LightLDAP.Pipelines.InitializeAdEntry.CommitChanges, LightLDAP"/>
</initializeAdRoleEntry>
</pipelines>
<settings>
<!-- Defines the logging level of the module. If true, dumps every action entry into the log.
Default is false
-->
<setting name="LDAP.Debug" value="true" />
<!-- Defines if the configuration assumes indirect membership on common operations.
This setting affects the membership verification during login and user access check.
Default is false
-->
<setting name="LDAP.IncludeIndirectMembership" value="false" />
<!-- Defines if a certain profile should be applied for each user by default.
If the setting is not specified or is empty, no particular profile item is used.
Default is ""
-->
<!-- ENABLE SORT OPERATION
Determines whether the sorting is enabled
-->
<setting name="LDAP.EnableSorting" value="false" />
<!-- Default Sort Key-->
<setting name="LDAP.SortKey" value="codePage" />
<!-- LDAP GET ALL USERS SIZE LIMIT
Determines the max number of returned users for GetAll method
-->
<setting name="LDAP.SizeLimit" value="1000" />
<!-- LDAP FIND USERS SIZE LIMIT
Determines the max number of returned users for GetAll method
-->
<setting name="LDAP.FindSizeLimit" value="100" />
<!-- LDAP USER CACHE SIZE
Determines the size of the ldap users cache.
Specify the value in bytes or append the value with KB, MB or GB
A value of 0 (zero) disables the cache.
-->
<setting name="LDAP.Caching.UserCache" value="2MB" />
<!-- LDAP MEMBEROF CACHE SIZE
Determines the size of the ldap users cache.
Specify the value in bytes or append the value with KB, MB or GB
A value of 0 (zero) disables the cache.
-->
<setting name="LDAP.Caching.MemberOfCache" value="2MB" />
<!-- LDAP MEMBERS CACHE SIZE
Determines the size of the ldap users cache.
Specify the value in bytes or append the value with KB, MB or GB
A value of 0 (zero) disables the cache.
-->
<setting name="LDAP.Caching.MembersCache" value="2MB" />
<!-- SETTINGS PROPERTY VALUE FACTORY
Returns an SettingsPropertyValueFactory interface that resolves the active directory properties.
-->
<setting name="LDAP.SettingsPropertyValueFactory" value="LightLDAP.SettingsPropertyValueFactory, LightLDAP" />
<!-- RECONNECT PERIOD
Determines a reconnect period for attempts to restore connection after the connection gets break.
-->
<setting name="LDAP.ReconnectPeriod" value="0.00:00:10" />
<!-- TIME OUT NOTIFICATION
Determines a timeout for notification.
-->
<setting name="LDAP.NotificationTimeOut" value="1.00:00:00" />
<!-- FULL NAME PROPERTY NAME
Determines the full name property mapping.
-->
<setting name="LDAP.FullName" value="ad|unicode string|displayName" />
<!-- DELETE USER SCOPE
Determines the scope of the "delete user" operation.
-->
<setting name="LDAP.DeleteScope" value="Subtree" />
<!-- MAX VALUE RANGE
Determines the maximal value of an AD range attribute.
-->
<setting name="LDAP.MaxValueRange" value="1500" />
</settings>
For AD Enabled login, try login from /sitecore/admin/ldaplogin.aspx page.
I know this question is old, but I've had this issue recently and spent quite a bit of time researching the cause and solution via Microsoft docs, etc. There is sometimes an issue caused by the IIS refresh process when trying to access certain interfaces within com objects that are dynamically loaded from various DLL written in C++. These kind of DLLs/interfaces can be tricky and confusing. I have found that the best solution is to avoid some calls to the User Group principal objects that are given by this interface. If you are calling a method that looks something like: [Some user object].IsMemberOf([Some group object]). Try changing the code to avoid calling any function on the user object. From the example above, you could change the code to look like this:
foreach (var user in [Some group object].GetUsers())
{
if (user.SamAccountName == [Some user object].SamAccountName)
{
// Do your work here
}
}
Of course, the operations that you are performing in your code may not be the same as my example above, but hopefully that gives a basic understanding of the type of operations you may need to avoid.
This is regarding xml transformation within BPEL.
In my bpel process, data is coming from two separate sources (partnerLinks).
Data from both sources is in the same xml format.
I need to combine the data from the two XML documents into one xml document and then pass it back to the ESB.
I was trying with bpel:doXslTransform()).
I am not sure how to pass the two responses from the partnerLinks to this function in a single call.
I tried concatenating the two responses into a string within a message type variable and then pass this to the bpel:doXslTransform(). Is this the right approach to merge the data?
Yes, you can do a bpel:doXslTransform here.
This involves receiving an XML document from one service, converting it to a different Schema to form a new request message, and sending the new request to another service. Such documentation conversion can be accomplished using XSLT via the bpel:doXslTransform function.
<variables>
<variable name="A" element="foo:AElement" />
<variable name="B" element="bar:BElement" />
</variables>
...
<sequence>
<invoke ... inputVariable="..." outputVariable="A" />
<assign>
<copy>
<from>
bpel:doXslTransform("urn:stylesheets:A2B.xsl", $A)
</from>
<to variable="B" />
</copy>
</assign>
<invoke ... inputVariable="B" ... />
</sequence>
Please refer http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html for further information.
i am having a code similar to this:
<h:inputText id="email" value="#{managePasswordBean.forgotPasswordEmail}"
validatorMessage="#{validate['constraints.email.notValidMessage']}"
requiredMessage="#{validate['constraints.email.emptyMessage']}"
validator="#{managePasswordBean.validateForgotPasswordEmail}"
required="true">
<f:validateRegex pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*#[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$" />
</h:inputText>
The validator in the backing bean has its own validation message generated. but it is overwritten by the validatorMessage of the inputText tag.
My Question is: how can i define a custom validator message for the validateRegex tag? I don't want to remove the validatorMessage cause then JSF is displaying an own error message containing the regex pattern and so on -> which i dont find very pretty.
Thanks for the help :)
You can't define a separate validatorMessage for each individual validator. Best what you can do is to do the regex validation in your custom validator as well, so that you can remove the validatorMessage.
Update: since version 1.3, the <o:validator> component of the JSF utility library OmniFaces allows you to set the validator message on a per-validator basis. Your particular case can then be solved as follows:
<h:inputText id="email" value="#{managePasswordBean.forgotPasswordEmail}"
required="true" requiredMessage="#{validate['constraints.email.emptyMessage']}">
<o:validator binding="#{managePasswordBean.validateForgotPasswordEmail}" message="#{validate['constraints.email.notValidMessage']}" />
<o:validator validatorId="javax.faces.RegularExpression" pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*#[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,6})$" message="Your new custom message here" />
</h:inputText>
Unrelated to the concrete problem: these days you would be not ready for world domination as long as you still validate email addresses based on Latin characters. See also Email validation using regular expression in JSF 2 / PrimeFaces.
This worked for me.
You can write your custom messages in "validatorMessage"
<h:form id="form">
<h:outputLabel for="name">Name :</h:outputLabel>
<h:inputText id="name" value="#{editStock.name}" required="true" requiredMessage="Name field must not be empty" validatorMessage="Your name can have only Alphabets">
<f:validateRegex pattern="^[a-zA-Z]*$" />
</h:inputText><br/>
<h:message for="name" style="color:red" />
<h:commandButton value="Update" action="#{stock.update(editStock)}" style="width: 80px;"></h:commandButton>
</h:form>