XML in a.c.pro

Why would I want to use XML with a.c.pro?

a.c.pro XML provides you with the possibility to integrate your front-office applications directly with a.c.pro. Here is just one example:

If you operate a web store and you need to handle customer support requests, you can design your store's support pages so that they appear consistent with the rest of your store. After the customer fills out and submits a support request form, however, you can then use a.c.pro XML to immediately send the information to a.c.pro. The customer does not notice this; he does not know that the request he just submitted was immediately integrated into a system -- a.c.pro -- that inherently supports deadlines, escalations, automatic e-mail notifications and many other features. Because the data will be sent directly to a.c.pro, your support staff can immediately begin enjoying all of the back-office benefits of a.c.pro while they fulfill the customer's request.

A Sample Web Application: "AC Rocks"

We have created a live demonstration web application to illustrate the exact scenario discussed above. The sample scenario is a web store -- "AC Rocks" -- that sells rocks and stones. Also on the site is a customer service area that collects support requests from customers and sends information about those requests directly to a.c.pro. When a customer visits the support page and enters a support request, he has no knowledge that the details of his request are being sent to a.c.pro. When a member of the support staff logs into the "real" a.c.pro (www.acpro.at), he will see and work with the items that were created using a.c.pro XML from the website.

Click here to view AC Rocks, our sample a.c.pro XML web application.

If you are a programmer who is interested in using a.c.pro XML, please visit our sample code page. The code on that page is used in the AC Rocks sample web store.

Integrate your Testing with a.c.pro

a.c.pro XML is also ideal for integrating a.c.pro into your test environments. For example, tools like Armstrong Consulting's WebTest can be scripted to automatically feed test results into a.c.pro. In this way, the tedious exercise of documentation of test-cycles and test-results can be automated, ensuring an audit-trail of test activities for later reference.

DTD and Documentation Available

The DTD (schema) file can be downloaded directly from http://www.acpro.at/acpro.dtd or viewed in its entirety below on this page.

A few short examples of a.c.pro XML messages are found below. More detailed examples, and an overview of all a.c.pro XML messages, can be found in the XML Interface Guide (a PDF file).


Sample a.c.pro XML Messages

Posting the following to http://www.acpro.at/xmli.asp:

<?xml version ="1.0"?>
<a.c.pro>
<Login userid="userx" password="bongo"/>
<SaveItem>
	<Item projectName="my project" itemTitle="a new entry" assignedToID="fred">
		<Description>this is the description</Description>
	</Item>
</SaveItem>
</a.c.pro>

will produce the following response:

<?xml version ="1.0"?>
<a.c.pro>
	<LoginResponse status="ok"/>
	<SaveItemResponse status="ok" itemKey="545454"/>
</a.c.pro>  

or in the event of a login error:

<?xml version ="1.0"?>
<a.c.pro>
	<LoginResponse status="error" message="Invalid user id or password"/>
</a.c.pro> 

or in the event of an error trying to save the item:

<?xml version ="1.0"?>
<a.c.pro>
	<LoginResponse status="ok"/>
	<SaveItemResponse status="error" message="Project does not exist"/>
</a.c.pro>

More examples, and an overview of all a.c.pro XML messages, can be found in the XML Interface Guide (a PDF file).


 

DTD (Schema)

(The DTD may also be viewed as a separate file here.)

<!ELEMENT a.c.pro (

Login, 

GetProjectList*, 
GetProject*, 
SaveProject*, 
GetCategoryList*, 
GetPermissionList*, 
GetStatusList*, 
GetUrgencyList*, 
SaveCategoryList*,
SavePermissionList*,
SaveStatusList*,
SaveUrgencyList*,

GetProjectItems*, 
GetItems*, 
GetItem*, 
GetAttachment*,
SaveItem*, 
SaveAttachment*, 
DeleteItem*,

GetHoursList*, 
GetTodaysHours*, 
SaveHours*, 

GetOrganization*, 
GetUserList*, 
GetUser*, 
SaveOrganization*,
SaveUser*,

GetWorkTypeList*,
GetPurchaseOrderList*,
SavePurchaseOrderList*
)>

<!ENTITY % project "
	projectKey	CDATA	#IMPLIED
	projectName	CDATA	#IMPLIED"
>

<!ENTITY % user "
	userKey		CDATA	#IMPLIED
	userID		CDATA	#IMPLIED
	eMail		CDATA	#IMPLIED"
>

<!ENTITY % user2 "
	userKey		CDATA	#IMPLIED
	userID		CDATA	#IMPLIED
	userEmail	CDATA	#IMPLIED"
>

<!ENTITY % category "
	categoryKey	CDATA	#IMPLIED
	categoryName	CDATA	#IMPLIED"
>

<!ENTITY % urgency "
	urgencyKey	CDATA	#IMPLIED
	urgencyName	CDATA	#IMPLIED"
>

<!ENTITY % status "
	statusKey	CDATA	#IMPLIED
	statusName	CDATA	#IMPLIED"
>

<!ENTITY % workType "
	workTypeKey	CDATA	#IMPLIED
	workTypeName	CDATA	#IMPLIED"
>

<!ENTITY % deadlineStatus "
	deadlineReachStatusKey	CDATA	#IMPLIED
	deadlineReachStatusName	CDATA	#IMPLIED"
>

<!ENTITY % enteredBy "
	enteredByKey	CDATA	#IMPLIED
	enteredByID	CDATA	#IMPLIED
	enteredByEmail	cDATA	#IMPLIED"
>

<!ENTITY % assignedTo "
	assignedToKey	CDATA	#IMPLIED
	assignedToID	CDATA	#IMPLIED
	assignedToEmail	CDATA	#IMPLIED"
>

<!ENTITY % date "
	year		CDATA	#IMPLIED
	month		CDATA	#IMPLIED
	day		CDATA	#IMPLIED
	hour		CDATA	#IMPLIED
	minute		CDATA	#IMPLIED
	second 		CDATA	#IMPLIED"
>

<!ENTITY % organization "
	orgKey		CDATA	#IMPLIED
	orgName		CDATA	#IMPLIED"
>

<!ELEMENT Login EMPTY>
<!ATTLIST Login
	userid		CDATA	#REQUIRED
	password	CDATA	#REQUIRED
>

<!ELEMENT GetProjectList EMPTY>

<!ELEMENT GetCategoryList EMPTY>
<!ATTLIST GetCategoryList %project;>

<!ELEMENT GetPermissionList EMPTY>
<!ATTLIST GetPermissionList %project;>

<!ELEMENT GetStatusList EMPTY>
<!ATTLIST GetStatusList %project;>

<!ELEMENT GetUrgencyList EMPTY>
<!ATTLIST GetUrgencyList %project;>

<!ELEMENT GetHoursList EMPTY>
<!ATTLIST GetHoursList
	count		CDATA 	#IMPLIED
>

<!ELEMENT GetUserList EMPTY>

<!ELEMENT GetWorkTypeList EMPTY>

<!ELEMENT GetPurchaseOrderList EMPTY>

<!ELEMENT GetTodaysHours EMPTY>

<!ELEMENT GetItem EMPTY>
<!ATTLIST GetItem
	itemKey		CDATA	#REQUIRED
>

<!ELEMENT GetProjectItems EMPTY>
<!ATTLIST GetProjectItems %project;
	startIndex	CDATA	#IMPLIED
	count		CDATA	#IMPLIED
>

<!ELEMENT GetProject EMPTY>
<!ATTLIST GetProject %project;>

<!ELEMENT GetUser EMPTY>
<!ATTLIST GetUser %user;>

<!ELEMENT DeleteItem EMPTY>
<!ATTLIST DeleteItem
	itemKey		CDATA	#REQUIRED
>

<!ELEMENT SaveItem (Item)>

<!ELEMENT Item (DateDeadline?, DateStarted?, Description?, Comments?)>
<!ATTLIST Item
	%project;
	%category;
	%urgency;
	%status;
	%deadlineStatus;
	%assignedTo;
	
	itemKey		CDATA	#IMPLIED
	itemTitle	CDATA 	#IMPLIED
	suppressOnBehalfOf CDATA #IMPLIED
	productVersion	CDATA	#IMPLIED
	notifyCC	CDATA	#IMPLIED
	resolvedInVersion	CDATA	#IMPLIED
>

<!ELEMENT DateDeadline EMPTY>
<!ATTLIST DateDeadline %date;>

<!ELEMENT DateStarted EMPTY>
<!ATTLIST DateStarted %date;>

<!ELEMENT Comments (#PCDATA)>

<!ELEMENT Description (#PCDATA)>

<!ELEMENT SaveHours (Hours)>

<!ELEMENT WorkDate EMPTY>
<!ATTLIST WorkDate %date;>

<!ELEMENT Hours (WorkDate+)>
<!ATTLIST Hours
	hoursKey	CDATA	#IMPLIED
	%project;
	purchaseOrderKey	CDATA	#IMPLIED
	workTypeKey	CDATA	#IMPLIED
	itemKey		CDATA	#IMPLIED
	hours		CDATA	#REQUIRED
	%user2;
	description	CDATA	#IMPLIED
>

<!ELEMENT GetAttachment EMPTY>
<!ATTLIST GetAttachment
	itemKey		CDATA	#REQUIRED
	fileName	CDATA	#REQUIRED
>



<!ELEMENT GetItems (Search?, Filter?)>

<!ELEMENT Search EMPTY>
<!ATTLIST Search
	text		CDATA	#REQUIRED
	scope (SELF | SUB | RELATED) "SELF"
>

<!ELEMENT Filter (ProjectFilter)>
<!ATTLIST Filter
	loggedInUserOnly	(TRUE|FALSE) "FALSE"
>


<!ELEMENT ProjectFilter (ItemStatus?, ItemsCreatedBy?, ItemsAssignedTo?)>
<!ATTLIST ProjectFilter 
	%project;	
>	

<!ELEMENT ItemsCreatedBy EMPTY>
<!ATTLIST ItemsCreatedBy %user2;>

<!ELEMENT ItemsAssignedTo EMPTY>
<!ATTLIST ItemsAssignedTo %user2;>

<!ELEMENT ItemStatus EMPTY>
<!ATTLIST ItemStatus %status;>

<!ELEMENT SaveAttachment (Contents, FileDateTime)>
<!ATTLIST SaveAttachment
	itemKey 	CDATA	#REQUIRED
	fileName	CDATA	#REQUIRED
>

<!ELEMENT FileDateTime EMPTY>
<!ATTLIST FileDateTime %date;>

<!ELEMENT Contents (#PCDATA)>
<!ATTLIST Contents
	encoding	CDATA	#REQUIRED
	mimeType	CDATA	#IMPLIED
	xmlns:dt	CDATA	#IMPLIED
	dt:dt		CDATA	#IMPLIED
	
>

<!ELEMENT SaveProject (InheritSettingsProject?,Project)>

<!ELEMENT InheritSettingsProject EMPTY>
<!ATTLIST InheritSettingsProject %project;>


<!ELEMENT Project (ParentProject?)>
<!ATTLIST Project 
	%project;
	projectComment		CDATA			#IMPLIED
	projectDescription	CDATA			#IMPLIED
	projectStatus 		(ACTIVE | INACTIVE)	"ACTIVE"
	autoDeadlineDays	CDATA			#IMPLIED
	mandatoryDeadlines	(TRUE|FALSE)		"FALSE"
	useProductVersionField	(TRUE|FALSE)		"FALSE"
	useSourceReference	(TRUE|FALSE)		"FALSE"
	useResultReference	(TRUE|FALSE)		"FALSE"	
>



<!ELEMENT ParentProject EMPTY>
<!ATTLIST ParentProject %project;>

<!ELEMENT ItemTemplate EMPTY>

<!ELEMENT MeetingTemplate EMPTY>

<!ELEMENT Script EMPTY>

<!ELEMENT GetOrganization EMPTY>
<!ATTLIST GetOrganization %organization;>

<!ELEMENT SaveOrganization EMPTY>
<!ATTLIST SaveOrganization
	%organization;
	orgDescription		CDATA	#IMPLIED
>

<!ELEMENT SaveUser (User)>
<!ATTLIST SaveUser
	isNew		(TRUE|FALSE)	"FALSE"
>

<!ELEMENT User EMPTY>
<!ATTLIST User
	%user;
	phone1		CDATA	#IMPLIED
	phone2		CDATA	#IMPLIED
	fax		CDATA 	#IMPLIED
	title		CDATA	#IMPLIED 
	firstName	CDATA	#IMPLIED
	lastName	CDATA	#IMPLIED
	password	CDATA	#IMPLIED
>	

<!ELEMENT SavePermissionList (Permission+)>
<!ATTLIST SavePermissionList %project;>

<!ELEMENT Permission EMPTY>
<!ATTLIST Permission 
	%user2;
	grant		(TRUE|FALSE)	"TRUE"
>

<!ELEMENT SaveCategoryList (Category+)>
<!ATTLIST SaveCategoryList %project;>

<!ELEMENT Category EMPTY>
<!ATTLIST Category 
	%category;
	action		(ADD|DELETE|CHANGE)	"ADD"
>

<!ELEMENT SaveUrgencyList (Urgency+)>
<!ATTLIST SaveUrgencyList %project;>

<!ELEMENT Urgency EMPTY>
<!ATTLIST Urgency 
	%urgency;
	action		(ADD|DELETE|CHANGE)	"ADD"
	urgencyLevel CDATA #IMPLIED
>

<!ELEMENT SaveStatusList (Status+)>
<!ATTLIST SaveStatusList %project;>

<!ELEMENT Status EMPTY>
<!ATTLIST Status 
	%status;
	action		(ADD|DELETE|CHANGE)	"ADD"
>


<!ELEMENT SavePurchaseOrderList (PurchaseOrder+)>

<!ELEMENT PurchaseOrder EMPTY>
<!ATTLIST PurchaseOrder
	purchaseOrderKey	CDATA	#IMPLIED
	purchaseOrderName	CDATA	#IMPLIED
	%project;
	action			(ADD|DELETE|CHANGE)	"ADD"
	origManHours		CDATA	#IMPLIED
	status			(ACTIVE|INACTIVE)	"ACTIVE"
>