WS02 G-REG new metadata type - wso2

We're testing G-Reg for use of a SOA repository. The default types are Services, WSDL's, Schemas and WS Policies, we're triying to add a new type (Persons for example).
Once added, we want to create a xml to specify the fields that needs to be filled to upload a new resource of the "Persons" type, (like the Services type actual funcionality).
We've followed the guide on http://docs.wso2.org/wiki/display/Governance411/Configurable+Governance+Artifacts, but with no success of creating the example named "Events", because there exists contradictory information, the path "/_system/governance/repository/components/org.wso2.carbon.governance/types", doesn't exists on GREG 4.1.1, so where is supposed the content to be uploaded?
And, the guide explains about a "registry extension file" and a "content", which is the difference between them?, they need a name?, content.xml and extfile.xml perhaps?
Any orientation will be greatly appreciated
Thanks,
Gabriel.

Here is a sample server.rxt file I have created.
<artifactType type="application/vnd.wso2-server+xml" shortName="server" singularLabel="Server" pluralLabel="Servers" hasNamespace="false" iconSet="5">
<storagePath>/servers/#{overview_name}/</storagePath>
<ui>
<list>
<column name="Name">
<data type="path" value="overview_name" href="#{storagePath}"/>
</column>
</list>
</ui>
<content>
<table name="Overview">
<field type="text" required="true">
<name label="name">Name</name>
</field>
<field type="text" required="true">
<name label="url">url</name>
</field>
<field type="text" required="true">
<name label="username">username</name>
</field>
<field type="text" required="true">
<name label="password">password</name>
</field>
</table>
</content>
</artifactType>
you need to save this under the directory you have mentioned.
/_system/governance/repository/components/org.wso2.carbon.governance/types
this location is not exits. But you need to create this directory and save.
After restart you should see the new type under meta data list

Related

Add multiple Web Service Operations in WSO2 Governance Registry

I need to add new field to the Soap Service. This field can add unbounded operations (contain name, description, example xml).For example, is this possible?
In the Artifact Source i tried inside a but it is not possible and I cant see how to make something similar like the image.
Thanks!
You can add a new field which can add unbounded operations as displayed in the image attached through the below code segment. Hope this helps.
<table name="WebServiceOperations" columns="3" maxoccurs="unbounded">
<subheading>
<heading>Name</heading>
<heading>Description</heading>
<heading>XML</heading>
</subheading>
<field type="text">
<name label="Name">name</name>
</field>
<field type="text-area">
<name label="Description">description</name>
</field>
<field type="text-area">
<name label="xml">xml</name>
</field>
</table>
Note: If you want to get the exact view you have to create or update the GC extension points. For that please refer this question.

Adding New Artifact Types and New Record to Artifact Types in WSO2 Gov. Reg 4.6

I am getting an error when adding a new record to a new artifact type I created. The error is as follows
failed to add/edit artifact details. A valid qualified name was not set for this artifact
I created a new artifact type called 'Domain'. The artifact type was added but I cannot add new records to it. Get the same error as above when I add new record to Domain artifact type. My xml is attached.
<?xml version="1.0"?>
<artifactType type="application/vnd.wso2-domain+xml" shortName="domain" singularLabel="Domain" pluralLabel="Domains" hasNamespace="false" iconSet="9">
<storagePath>/domains/#{overview_domain}/#{overview_parentname}/domain</storagePath>
<nameAttribute>overview_domain</nameAttribute>
<ui>
<list>
<column name="Domain">
<data type="text" value="overview_domain"/>
</column>
<column name="Parent Domain">
<data type="text" value="overview_parentname"/>
</column>
</list>
</ui>
<content>
<table name="Domain">
<field type="options" required="true">
<name label="Domain Name">Domain Name</name>
<values>
<value>Research</value>
<value>Development</value>
<value>Medicine</value>
<value>Marketing and Sales</value>
<value>Operations</value>
<value>Enabling Functions</value>
<value>Communications</value>
<value>Human Resources</value>
<value>Finance</value>
<value>Legal</value>
<value>Purchasing</value>
<value>Information Systems</value>
</values>
</field>
<field type="options">
<name label="Parent Domain Name">Parent Domain Name</name>
<values>
<value/>
<value>Research</value>
<value>Development</value>
<value>Medicine</value>
<value>Marketing and Sales</value>
<value>Operations</value>
<value>Enabling Functions</value>
<value>Communications</value>
<value>Human Resources</value>
<value>Finance</value>
<value>Legal</value>
<value>Purchasing</value>
<value>Information Systems</value>
</values>
</field>
</table>
</content>
</artifactType>
Also I want to know if there is a thorough document describing how to add artifact types and records. As an example I added a storage path called
/domains/#{overview_domain}/#{overview_parentname}/domain
but I do not know where this points to and if this is even valid or not. The documentation in the online help is not adequate enough to add new artifact structures and records.
Thanks
Under the <ui> tag you have listed two columns. The value attribute given to each column must be in the format {basetable}_{fieldname}
Therefor the names given under each <field> must match with the value <data attribute= of corresponding <column> under <ui>.
To get rid of the error, change the name of the first field to be "Domain" so that it matches with the name that you have given in the column(i.e. overview_domain). So that the tag of the first should look like
<name label="Domain Name">Domain</name>
You should do the same for the second field too, so that the of second field must look as follows
<name label="Parent Domain Name">ParentName</name>
Kindly find the corrected domain.rxt.
To create your own RXTs please find this article.
<?xml version="1.0"?>
<artifactType type="application/vnd.wso2-domain+xml" shortName="domain" singularLabel="Domain" pluralLabel="Domains" hasNamespace="false" iconSet="9">
<storagePath>/domains/#{overview_domain}/#{overview_parentname}/domain</storagePath>
<nameAttribute>overview_domain</nameAttribute>
<ui>
<list>
<column name="Domain">
<data type="text" value="overview_domain"/>
</column>
<column name="Parent Domain">
<data type="path" value="overview_parentname" href="#{storagePath}"/>
</column>
</list>
</ui>
<content>
<table name="Overview">
<field type="options" required="true">
<name label="Domain Name">domain</name>
<values>
<value>Research</value>
<value>Development</value>
<value>Medicine</value>
<value>Marketing and Sales</value>
<value>Operations</value>
<value>Enabling Functions</value>
<value>Communications</value>
<value>Human Resources</value>
<value>Finance</value>
<value>Legal</value>
<value>Purchasing</value>
<value>Information Systems</value>
</values>
</field>
<field type="options">
<name label="Parent Domain Name">parentname</name>
<values>
<value/>
<value>Research</value>
<value>Development</value>
<value>Medicine</value>
<value>Marketing and Sales</value>
<value>Operations</value>
<value>Enabling Functions</value>
<value>Communications</value>
<value>Human Resources</value>
<value>Finance</value>
<value>Legal</value>
<value>Purchasing</value>
<value>Information Systems</value>
</values>
</field>
</table>
</content>
</artifactType>

How do I get Lucene.NET to combine 2 Sitecore fields in to 1 index field?

I am using Lucene.NET with Sitecore for searching. I have created a custom Lucene index. Normally it is a one-to-one mapping between Sitecore fields and Lucene index fields. I would like to be able to take 2 fields and combine them in the Lucene index. Below is an example of my custom index definition. You will see a field called Activity and a field called Board. Then below it is an example of what I am trying to do - combine Activity and Board in to one field in the index. I just am not sure if this is possible and if so, what the syntax is for defining a combined field like this. Any ideas?
<index id="reportsIndex" singleInstance="true" type="IOM.library.CustomIndexer, IOM">
<param desc="name">$(id)</param>
<template hint="list:AddTemplate">
<template>{79EBE484-BAD6-4173-B80A-29AC7D734565}</template>
</template>
<fields hint="raw:AddField">
<field target="Title">Title</field>
<field target="SortTitle" storage="keyword">Title</field>
<field target="ShortDescription">ShortDescription</field>
<field target="FullDescription">FullDescription</field>
<field target="Topic">Topic</field>
<field target="Type">Type</field>
<field target="ReleaseDate">ReleaseDate</field>
<field target="Series">Series</field>
<field target="Activity">Activity</field>
<field target="Board">Board</field>
<field target="MyCombinedField">??Activity, Board??</field>
</fields>
</index>
UPDATE: I tried to do what people have suggested and map 2 different Sitecore fields to the same Lucene field. However that doesn't seem to work. I tried the following:
<index id="reportsIndex" singleInstance="true" type="IOM.library.CustomIndexer, IOM">
<param desc="name">$(id)</param>
<template hint="list:AddTemplate">
<template>{79EBE484-BAD6-4173-B80A-29AC7D734565}</template>
</template>
<fields hint="raw:AddField">
<field target="Title">Title</field>
<field target="Activity">Activity</field>
<field target="Board">Board</field>
<field target="MyCombinedField">Activity</field>
<field target="MyCombinedField">Board</field>
</fields>
</index>
When I look in IndexViewer this is what I see. If the content item has content for the Activity field then that will get populated in the "MyCombinedField" (since it is first). If the Activity field has no content then Lucene will populate the "MyCombinedField" with the Board content. But it never puts both field's content in to the MyCombinedField field. Am I doing something wrong?
You must be using the old data indexes. Are you running pre Sitecore 6.5? You might consider rewriting your code to use Sitecore.Search.
Anyway you can index multiple Sitecore Fields in the same Lucene field by something similar to this:
<index id="system" singleInstance="true" type="Sitecore.Data.Indexing.Index, Sitecore.Kernel">
<param desc="name">$(id)</param>
<fields hint="raw:AddField">
<field target="name">#name</field>
<field target="name">__created</field>
<field target="name">#tid</field>
In this case both the name of the item, the created date field and the template id is indexed in the same field.
So in short: Just create multiple field elements with the same target attribute

How to Add a Default Image to SharePoint 2010 Custom List Instance Image Column

I'm creating a custom list definition in Visual Studio for SharePoint 2010. In the list definition elements file, I've provided some default values for the list instance as below:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<ListInstance Title="News"
OnQuickLaunch="FALSE"
TemplateType="10000"
Url="Lists/News"
Description="Contains news articles related to happenings at Corporate.">
<Data>
<Rows>
<Row>
<!-- Default list data -->
<Field Name="Photo">http://myserver/sites/foobar/Style%20Library/Images/Custom/myimage.png</Field>
<Field Name="Title">My Title</Field>
<Field Name="Body">My article.</Field>
<Field Name="Modified">12-21-2012</Field>
<Field Name="Author">99;#mydomain\bsmith</Field>
<Field Name="Expires">01-22-2013</Field>
</Row>
</Rows>
</Data>
The default list is successfully created with the values above, except that the Photo and Author columns are displaying as blank. Any ideas on how I can populate those columns correctly? I know the photo URL is valid as I can browse to it. And another posting pointed me to the "99;#" prefix for the author column--without the prefix, every column in the list displays as blank.
Also, here are the list schema fields, if it matters:
<Field ID="{d3a92d97-2b77-4a25-9698-3ab54874bc17}"
Name="Photo" ShowInNewForm="TRUE" ShowInEditForm="TRUE"
Type="Image" DisplayName="Photo"
Required="TRUE"></Field>
<Field ID="{d3a92d97-2b77-4a25-9698-3ab54874bc11}"
Name="Title"
Type="Text" DisplayName="Title"
Required="TRUE"></Field>
<Field ID="{d3a92d97-2b77-4a25-9698-3ab54874bc16}"
Name="Body"
Type="Note" DisplayName="Body"
Required="TRUE" NumLines="100"></Field>
<Field ID="{d3a92d97-2b77-4a25-9698-3ab54874bc13}"
Name="Modified"
Type="DateTime" DisplayName="Modified"
Required="TRUE"></Field>
<Field ID="{d3a92d97-2b77-4a25-9698-3ab54874bc14}"
Name="Author"
Type="Text" DisplayName="Author"
Required="FALSE"></Field>
<Field ID="{d3a92d97-2b77-4a25-9698-3ab54874bc15}"
Name="Expires"
Type="DateTime" DisplayName="Expires"
Required="FALSE"></Field>
Try provisioning your field data like this in your list instance.
<Field Name="Photo"><![CDATA[<IMG SRC="/sites/foobar/Style%20Library/Images/Custom/myimage.png"></IMG>]]></Field>

how to get only the children nodelist using getElementByTagName?

I have this XML File from which I want to extract my message children fields
<message name="IOI" >
<field number="23" name="IOIID" type="STRING" required="Y" />
<field number="28" name="IOITransType" type="CHAR" required="Y" >
<value enum="C" description="CANCEL" />
<value enum="N" description="NEW" />
<value enum="R" description="REPLACE" />
</field>
<field number="26" name="IOIRefID" type="STRING" required="N" />
<component name="SecAltIDGrp" required="N" >
<field number="454" name="NoSecurityAltID" type="NUMINGROUP" required="N" >
<field number="455" name="SecurityAltID" type="STRING" required="N" />
<field number="456" name="SecurityAltIDSource" type="STRING" required="N" />
</field>
</component>
so I used getElementsByTagName() but it gave me all children with their children, so how could I only get my message fields without my fields's fields ??
DOMNodeList* fieldsNodeList = MessageElement->getElementsByTagName(xmlStrVar);
Xerces C++ provides partial XPath implementation. And here's an SO question with more details about it. With that said, depending on the version of Xerces C++ you're using, you should be able to run simple XPath expressions like /message/field.
Another option is to stay with the DOM API and just iterate through the child nodes using getChildNodes() available on the DOMNode looking for field elements.
Last but not the least, if you liked the XPath idea but your Xerces C++ version is not up to it, consider stepping out of your "comfort zone" and look at Xalan C++ or libxml2. Both should have full XPath 1.0 support.