basquang™ on clouds

July 27, 2009

Export InfoPath form to Word 2003 document sử dụng XSLT và XPath

Filed under: InfoPath — basquang @ 9:15 AM

Khi làm việc với InfoPath, nhiều khi chúng ta có nhu cầu Export ra file .doc để người dùng không phải IT pro có thể chỉnh sửa theo ý mình. Bài viết Convert an InfoPath form into a Word 2003 document and send this as an attachment in an e-mail trình bày cho các bạn cách để thực hiện điều đó. Tuy nhiên, bài viết này mới chỉ dừng lại ở việc Export giữ liệu tĩnh, nghĩa là khi chúng ta thay đổi nội dung trên form, thì khi export ra file .doc lại không thay đổi.

Bài viết này trình bày cho các bạn một cách đầy đủ, cách để Export InfoPath form ra Word 2003 (chú ý, là Word 2003. Để export ra Word 2007 tôi sẽ trình bày trong một bài viết khác).

1. Thiết kế một InfoPath form như sau:

image

2. Fill form này và lưu thành file Form1.xml

image

3. Mở file bạn vừa save từ InfoPath form (Form1.xml) trên Word. Sau đó tiến hành thêm nội dung, chỉnh sửa giao diện của file xml này trên Word.

Sau khi format xong, chúng ta chọn File –> Save As. Trong hộp thoại Save As, chú ý là chúng ta bỏ chọn Save data only checkbox và đặt tên file là Form1_1.xml

image image

4. Việc tiếp theo là chúng ta download và cài đặt WordML Transform Inference Tool. Sau đó chúng ta sử dụng cmd để thực thi việc tạo XSLT file như sau:

WML2XSLT.EXE "C:\InfoPath\ExportToWord2003\Form1_1.xml" -o "C:\InfoPath\ExportToWord2003\XMLToWordML.xsl"

Chúng ta bấm Select All và click Ok nếu hộp thoại “Select namespaces” xuất hiện.

image 

5. Quay trở lại InfoPath trong trạng thái Design mode. Chúng ta chọn File –> Save as source files

image

6. Mở myschema.xsd trong SourceFile folder vừa export từ InfoPath, và XMLToWordML.xsl vừa mới tạo từ tool, bằng một Text editor nào đó. Sau đó chúng ta copy 2 namespace từ xsd sang xsl như sau:

myschema.xsd
 
<xsd:schema targetNamespace="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-07-27T07:17:59" 
...
xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-07-27T07:17:59" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
...
>

XMLToWordML.xsl sau khi copy

<xsl:stylesheet version="1.0" 
xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2009-07-27T07:17:59" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
...
>

7. Tiếp theo chúng ta tìm đến các nội dung: “Quang” và “Nguyen Ba” được bao trong thẻ <xsl:text>….</xsl:text> của xsl, để thay thế nó bằng XPath như sau.

<xsl:text>Quang</xsl:text> –> <xsl:value-of select="my:myFields/my:firstName" />

<xsl:text>Nguyen Ba</xsl:text> –> <xsl:value-of select="my:myFields/my:lastName" />

<xsl:text>http://basquang.spaces.live.com</xsl:text> –> <xsl:value-of select="my:myFields/my:website" />

Sau đó chúng ta save file này.

8. Quay trở lại InfoPath form ở dạng Design mode. Chúng ta chọn Tools –> Data Connections… và chọn Add button. Trong hộp thoại Data Connection Wizard chúng ta chọn “Receive Data” và trỏ tới file XMLToWordML.xsl và để mặc định các lựa chọn của Wizard. Chú ý tên cho data connection là XMLToWordML

image

9. Vào Tools –> Options để kiểm tra Default programming language khi design form bằng InfoPath là được thiết lập cho JScript

image

10.  Click đúp vào “Export to Word 2003” button và chọn Edit Form Code. Sau đó Add đoạn code sau trong OnClick event và Save InfoPath.

image image

var formInXML = XDocument.DOM;
var xslXMLToWordML = XDocument.GetDOM("XMLToWordML"); 
var formInWordML = formInXML.transformNode(xslXMLToWordML);
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(formInWordML);
xmlDoc.save("C:\\InfoPath\\InfoPathFormInWordML.xml");
var wordApp = new ActiveXObject("Word.Application");
wordApp.Documents.Open("C:\\InfoPath\\InfoPathFormInWordML.xml");
wordApp.Visible = true;

 

11. Mở Tools –> Form Options –> Security and Trust  để chọn Full Trust và Sign this form

image

12. Giờ chúng ta sẵn sàng sử dụng Export InfoPath to Word 2003 function

image

Advertisements

Leave a Comment »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Create a free website or blog at WordPress.com.

%d bloggers like this: