iphone, cmis, and amazon ec2 - tech talk live with alfresco
DESCRIPTION
Mike Mahon, President and Mike Muller, Director, Software Consulting at Zia Consulting talk about a native iPhone application Zia has developed that allows mobile access to an Alfresco document repository. This application runs against the most recent Alfresco releases; no additional software needs to be installed on the servers and no configuration of Alfresco is required.It is configured by default to run against an Alfresco instance running in the Cloud. All of the calls to Alfresco to authenticate and pull content are utilizing Alfresco’s CMIS API.We are currently beta-testing the application, called Fresh Docs, for submission to Apple’s app store. To be notified when it’s available in the app store, or to participate in the beta test, contact [email protected]. You can find more information about the app and our plans to Open Source the code behind it at www.ziaconsulting.com/iphone.To attend, please visit http://alfresco.acrobat.com/live and enter the meeting room as a Guest.You can find more information about TTL here:http://drquyong.com/myblog/?p=203and the wiki linkhttp://wiki.alfresco.com/wiki/Live#ScheduleTRANSCRIPT
iPhone native App, CMIS and the Cloud
Mike Mahon, President, [email protected]
Mike Muller, Director, Software Consulting, [email protected]
10/30/09 www.ziaconsulting.com 303.443.4004 x203
Who is Zia?
10/30/09 www.ziaconsulting.com 2
A firm with deep technical expertise and strategic insight, dedicated providing customers with the following benefits:
BenefitsZia’s deep technical expertise and strategic insight, coupled with our Agile software methodology, provide numerous benefits to our customers:
✦ Achieve ROI by delivering improved operational efficiencies
✦ Boost productivity by creating collaborative work environments
✦ Maintain access and control of information through the enterprise
✦ Allow employees to find the information they need, when they need it
✦ Increase end-user adoption
✦ Agile training by using Zia methodology and Rally tools
Professional Qualifications✦ Highly-experienced senior staff consisting of Business Analysts, Enterprise Architects, Software Engineers and Data Architects
✦ Alfresco Professional Services Partner
Our Partners
Enterprise Content Management (ECM)
Enterprise 2.0 Solutions
Data Management
At its heart, our Agile-based methodology is centered on a close collaborative approach to maximizing value for our customers. Constant client communication is necessary to ensure that each development iteration addresses features with the highest business value, even if those features were unknown at the launch of the project.
Zia’s Agile Solution Methodology
Organizations have increasing demand for accessibility to information. It is critical to guarantee data security, consistency, and timeliness, while providing that data access. Zia’s expertise in data management helps organizations implement effective data governance strategies. This governance is the key to effective data management and success.
The focus of technology should always be on people. Zia enables our customers to gain tremendous competitive advantage by allowing their team to collaborate more effectively, respond more quickly to changes, and make better decisions. Adopters of Enterprise 2.0 solutions will find they have a more productive, engaged and informed team.
An ECM is a cultivation of knowledge -- one of the most valuable assets to any organization. A proper ECM system ensures content has integrity through proper version control, allows producers to easily create content and publish it to a variety of mediums, and it automates processes, streamlining the review, approval and distribution of content across an organization. Zia's ECM offerings provide all of these benefits, and more, in a manner tailored to the client's business needs.
Service Offerings
What is the project?
10/30/09 www.ziaconsulting.com 4
Zia has developed an app that allows mobile access to an Alfresco document repository. This application runs against the most recent Alfresco releases; no additional software needs to be installed on the servers and no configuration of Alfresco is required.
It is configured by default to run against an Alfresco instance running in the Cloud. All of the calls to Alfresco to authenticate and pull content are utilizing Alfresco’s CMIS API.
Why did we do this project?
10/30/09 www.ziaconsulting.com 5
Interest in the platform
Contribute back to the community
Great learning opportunity
Why use the Cloud?
10/30/09 www.ziaconsulting.com 6
Reduced cost compared to dedicated server
XFS and Amazon EBS snapshots allow nearly instant online backups
http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1663
Duplicate instances quickly and easily
Grow repository space quickly and easily
Excellent public demo site for the iPhone app
Why CMIS?
10/30/09 www.ziaconsulting.com 7
LightweightStandards-basedInteroperable
For more information:
http://en.wikipedia.org/wiki/Content_Management_Interoperability_Services
http://wiki.alfresco.com/wiki/CMIS
Demo
10/30/09 www.ziaconsulting.com 8
Benefits of a Native App
Offline operationUsability and performancePush notification
Required Services
Get sitesGet childrenGet contentSearch
Get Sites
[ { "url" : "\/alfresco\/service\/api\/sites\/clients", "sitePreset" : "site-dashboard", "shortName" : "clients", "title" : "Consulting", "description" : "Zia Consulting client focused site. Contains materials on proposal...", "node" : "\/alfresco\/service\/api\/node\/workspace\/SpacesStore\/65be3462-ddb7-415f-a263-d7aca36953ee", "tagScope" : "\/alfresco\/service\/api\/tagscopes\/workspace\/SpacesStore\/65be3462-ddb7-415f-a263-d7aca36953ee", "isPublic" : false, "visibility" : "PRIVATE", "siteManagers" : ["mmahon", "pjh", "bwavell", "pmyers", "jbarry"] },{ "url" : "\/alfresco\/service\/api\/sites\/intranet", "sitePreset" : "site-dashboard", "shortName" : "intranet", ...
alfresco/service/api/sites?format=json
Get Childrenalfresco/service/api/node/workspace/SpacesStore/<GUID>/children<feed>... <entry> <author><name>pmahon</name></author> <content>54186503-ed0c-4037-98d4-d071fbe8368e</content> <id>urn:uuid:54186503-ed0c-4037-98d4-d071fbe8368e</id> <link rel="cmis-type" href="http://foo.bar.com:80/alfresco/service/type/folder"/> <link rel="cmis-repository" href="http://foo.bar.com:80/alfresco/service/api/repository"/>… <published>2009-06-30T23:33:35.564Z</published> <summary></summary> <title>blog</title> <updated>2009-06-30T23:33:35.578Z</updated> <cmis:object> <cmis:properties> <cmis:propertyString cmis:name="LastModifiedBy"><cmis:value>pmahon</cmis:value></cmis:propertyString> <cmis:propertyDateTime cmis:name="LastModificationDate"><cmis:value>2009-06-30T23:33:35.578Z</cmis:value> </cmis:propertyDateTime>... </cmis:properties> </cmis:object> <cmis:terminator/> <app:edited>2009-06-30T23:33:35.578Z</app:edited> <alf:icon>http://foo.bar.com:80/alfresco/images/icons/space-icon-default-16.gif</alf:icon> </entry>...</feed>
Get Contentalfresco/service/api/node/workspace/SpacesStore/<guid>/filename.ext<feed>... <entry> <author><name>mmahon</name></author> <content type="application/msword" src="http://foo.bar.com:80/alfresco/service/api/node/workspace/SpacesStore/4cf3b9de-e492-4374-b0c5-b9a48661b011/content.doc"/> <id>urn:uuid:4cf3b9de-e492-4374-b0c5-b9a48661b011</id> <link rel="self" href="http://foo.bar.com:80/alfresco/service/api/node/workspace/SpacesStore/4cf3b9de-e492-4374-b0c5-b9a48661b011"/>... <link rel="repository" href="http://foo.bar.com:80/alfresco/service/api/repository"/> <published>2009-06-15T21:24:14.392Z</published> <summary></summary> <title>mmuller_bio.doc</title> <updated>2009-07-02T18:04:26.134Z</updated> <cmis:object> <cmis:properties> <cmis:propertyString cmis:name="BaseType"><cmis:value>document</cmis:value></cmis:propertyString>... <cmis:propertyId cmis:name="ObjectTypeId"><cmis:value>document</cmis:value></cmis:propertyId> </cmis:properties> </cmis:object> <cmis:terminator/> <app:edited>2009-07-02T18:04:26.134Z</app:edited> <alf:icon>http://foo.bar.com:80/alfresco/images/filetypes/doc.gif</alf:icon> </entry>...</feed>
Searchalfresco/service/search/keyword.atom?q=<pattern>&p=1&c=<count>
<feed>... <entry> <title>WBS-django-conversion.xls</title> <link rel="alternate" href="http://foo.bar.com:80/alfresco/service/api/node/content/workspace/SpacesStore/986b162e-0867-4a7b-9f4f-0e3837cdc97b/WBS-django-conversion.xls"/>... <icon>http://foo.bar.com:80/alfresco/images/filetypes/xls.gif</icon> <id>urn:uuid:986b162e-0867-4a7b-9f4f-0e3837cdc97b</id> <alf:noderef>workspace://SpacesStore/986b162e-0867-4a7b-9f4f-0e3837cdc97b</alf:noderef> <updated>2009-06-15T22:06:23.037Z</updated> <summary></summary> <author> <name>mmahon</name> </author> <relevance:score>0.012</relevance:score> </entry>...</feed>
CMIS
Content Mgmt Interoperability ServicesProvides abstract web API to access CMSSpecification not finalizedSOAP and RESTREST API based on AtomPub
CMIS Search
New query language: CQLBased on SQL 92Each content type is a tableEach property is a column
select Title, Description from document where LastModifiedBy = ‘mmuller’
CMIS Search Requestalfresco/service/api/query
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><query> <statement>select score() as Relevance, ContentStreamLength from Document where contains(‘pancakes')</statement> <pageSize>20</pageSize></query>
This is the body of the POST request(not the response)
pageSize must be > 0Content-Type = application/cmisquery+xmlnamespace is inconsistent
CMIS Search Responsealfresco/service/api/query
<feed>... <entry> <author><name>mmahon</name></author> <content type="application/vnd.excel" src="http://foo.bar.com:80/alfresco/service/api/node/workspace/SpacesStore/986b162e-0867-4a7b-9f4f-0e3837cdc97b/content.xls"/> <id>urn:uuid:986b162e-0867-4a7b-9f4f-0e3837cdc97b</id> <link rel="repository" href="http://foo.bar.com:80/alfresco/service/api/repository"/>... <title>WBS-django-conversion.xls</title> <updated>2009-06-15T22:06:23.037Z</updated> <cmis:object> <cmis:properties> <cmis:propertyString cmis:name="BaseType"><cmis:value>document</cmis:value></cmis:propertyString> <cmis:propertyDecimal cmis:name="Relevance"><cmis:value>0.0256947092711926</cmis:value></cmis:propertyDecimal> <cmis:propertyInteger cmis:name="ContentStreamLength"><cmis:value>18944</cmis:value></cmis:propertyInteger> </cmis:properties> </cmis:object> <cmis:terminator/> <alf:icon>http://foo.bar.com:80/alfresco/images/filetypes/xls.gif</alf:icon> </entry>...</feed>
THIS is the response
CMIS Get Sites
select f.Name from folder as f where f.ObjectTypeId = 'F/st_site'
alfresco/service/api/query
<feed>... <entry> <author><name>mmahon</name></author> <content>977a5305-6800-4825-ade3-73e53e032635</content> <id>urn:uuid:977a5305-6800-4825-ade3-73e53e032635</id> <link rel="repository" href="http://foo.bar.com:80/alfresco/service/api/repository"/>... <title>newclienttemplate</title> <updated>2009-09-05T11:45:55.925Z</updated> <cmis:object> <cmis:properties> <cmis:propertyString cmis:name="BaseType"><cmis:value>folder</cmis:value></cmis:propertyString> <cmis:propertyString cmis:name="f.Name"><cmis:value>newclienttemplate</cmis:value></cmis:propertyString> </cmis:properties> </cmis:object> <cmis:terminator/> <alf:icon>http://foo.bar.com:80/alfresco/images/icons/space-icon-default-16.gif</alf:icon> </entry>…</feed>
CMIS Get SitesHow do I get the description?
Get Childrenalfresco/service/api/node/workspace/SpacesStore/<GUID>/children
<feed>... <entry> <author><name>pmahon</name></author> <content>54186503-ed0c-4037-98d4-d071fbe8368e</content> <id>urn:uuid:54186503-ed0c-4037-98d4-d071fbe8368e</id> <link rel="cmis-type" href="http://foo.bar.com:80/alfresco/service/api/type/folder"/> <link rel="cmis-repository" href="http://foo.bar.com:80/alfresco/service/api/repository"/>... <published>2009-06-30T23:33:35.564Z</published> <summary></summary> <title>blog</title> <updated>2009-06-30T23:33:35.578Z</updated> <cmis:object> <cmis:properties> <cmis:propertyString cmis:name="LastModifiedBy"> <cmis:value>pmahon</cmis:value> </cmis:propertyString> <cmis:propertyDateTime cmis:name="LastModificationDate"> <cmis:value>2009-06-30T23:33:35.578Z</cmis:value> </cmis:propertyDateTime>... </cmis:properties> </cmis:object> <cmis:terminator/> <app:edited>2009-06-30T23:33:35.578Z</app:edited> <alf:icon>http://foo.bar.com:80/alfresco/images/icons/space-icon-default-16.gif</alf:icon> </entry>...</feed>
It was CMIS already!
Next Steps One call to get top-level site documents Workflow (approve/reject) Push notification (of task events, for instance) More Share features (blogs, forums, etc.)
Send an email to [email protected] to become a beta tester
Visit www.ziaconsulting.com/iphone for more information Release the source code
Zia Clients