私は少し Visio の実験を行っています。私がやりたいのは、SharePoint で Visio ファイルを表示することです。Visio ファイルは、建物のレイアウトを示し、会議室とそのステータス + Outlook でそれらを予約する機能を示しています
会議室は Outlook で電子メール アドレスとして識別され、会議室に電子メールを送信して予約することができます。
部屋がたくさんあり、部屋を会議出席依頼に追加する前に空室状況を確認できないため、Visio でこの概要を作成したいと思います。
これまでのところ: 部屋と会議に関する情報を取得し、SQL2008R2 データベースに書き込むタイマー サービスとして実行される C# で記述されたプログラム。
2 つのテーブル:
部屋: RoomEmail、RoomName、FloorNumber、Capacity、RoomStatus(現在)
ミーティング: MeetingID、RoomEmail(FK)、MeetingTitle、MeetingStatus、MeetingStartTime、MeetingEndTime。
Visio ファイルが SharePoint に追加され、そこで機能し、適切に更新されます。部屋は、忙しい場合は赤、空いている場合は緑、仮の場合は黄色で表示されます。
これは現在のステータスに大いに役立ちますが、あと 2 つの機能が必要です。
- Visio ダイアグラムまたは別の WebPart のどこかのリンクをクリックして、ローカルの Outlook クライアントを開いて、新しい会議と「to」フィールドの部屋を開くことができます
- 選択した会議室でスケジュールされた会議を表示して、Outlook を開く前にいつ予約できるかを確認できます。
私が見た後、Visio 内で図形をデータ接続するときに、図形を特定の 1 つの行にリンクすることはできません (そのため、Room テーブルに roomStatus を追加しました)。これまでのところ、Javascript で Visio 図形を使用してロジックを実行できることを見てきました。
これをコンテンツ Web パーツに追加しました。
<script language="javascript">
var app = Sys.Application;
app.add_load(onApplicationLoad);
// hold an instance of the Visio VWA control
var vwaControl;
var shapeSelectionChangedHandler = null;
function onApplicationLoad()
{
vwaControl= new Vwa.VwaControl("WebPartWPQ4");
vwaControl.addHandler("diagramcomplete", onDiagramComplete);
vwaControl.addHandler("shapeselectionchanged", shapeSelectionChangedHandler);
}
function onDiagramComplete()
{
var vwaPage = vwaControl.getActivePage();
vwaPage.setZoom(35); // force the initial zoom level
}
shapeSelectionChangedHandler = function(source, args)
{
// get the selected shape from the shapes on the page
var vwaPage = vwaControl.getActivePage();
var vwaShapes = vwaPage.getShapes();
var shape = vwaShapes.getItemById(args);
// get the data to display for the selected shape
var data = shape.getShapeData();
var strRoomName = "";
var strFloorNumber = "";
var strCapacity = "";
var strStatus = "";
for (var j = 0; j < data.length; j++)
{
if (data[j].label == "RoomName")
{
strRoomName = data[j].value;
continue;
}
if (data[j].label == "FloorNumber")
{
strFloorNumber = data[j].value;
continue;
}
if (data[j].label == "Capacity")
{
strCapacity = data[j].value;
continue;
}
if (data[j].label == "RoomStatus")
{
strStatus = data[j].value;
continue;
}
}
// get the selected state input and set its value
var inputRoomName = document.getElementById('strRoomName');
inputRoomName.value = strRoomName;
var inputFloorNumber = document.getElementById('strFloorNumber');
inputFloorNumber.value = strFloorNumber;
var inputCapacity = document.getElementById('strCapacity');
inputCapacity.value = strCapacity;
var inputStatus = document.getElementById('strStatus');
inputStatus.value = strStatus;
}
</SCRIPT>
Room Name:<br>
<input id="strRoomName" name="Room Name" style="width: 284px" type="text" />
Floor Number:<br>
<input id="strFloorNumber" name="Floor Number" style="width: 284px" type="text" />
Capacity:<br>
<input id="strCapacity" name="Capacity" style="width: 284px" type="text" />
Status:<br>
<input id="strStatus" name="Status" style="width: 284px" type="text" />
このコードはうまく機能します。部屋をクリックすると、コンテンツ Web パーツに表示されます。リンク: http://msdn.microsoft.com/en-us/library/gg243427.aspx
そこで、Javascript から Outlook を開くことができるいくつかのサイトを調べました。
Ops、これ以上リンクを投稿できません。コードは次のとおりです。
function objappt(Subject, Start, Location, End, RequiredAttendees, Body) {
}
var objOL //As Outlook.Application;
var objAppt //As Outlook.AppointmentItem;
var olAppointmentItem = 1;
var olMeeting = 1;
objOL = new ActiveXObject("Outlook.Application");
objappt = objOL.CreateItem(olAppointmentItem);
// With objappt;
objappt.Subject = "My Test Appointment";
objappt.Start = "11/23/2008 9:00 AM";
objappt.End = "11/23/2008 9:45 AM";
// make it a meeting request;
objappt.MeetingStatus = olMeeting;
objappt.Location = "NSW";
objappt.Body = "Testing";
objappt.RequiredAttendees = "someone@somewhere.dom";
objappt.Display();
// End With;
objAppt = null;
objOL = null
番号 2:
//Open Meeting Request
function ResMtg(cal,start,end){
//alert(cal+' - '+start+' - '+end);
//Inbox = 6
//Calendar = 9
var mailFolder = ns.getDefaultFolder(9);
var mailItem = mailFolder.Items.Add("IPM.Appointment.ConfRmReq");
mailItem.MeetingStatus = 1;
mailItem.Subject = "**Meeting Subject**";
mailItem.Start = start;
mailItem.End = end;
var recipient = mailItem.Recipients.Add(cal);//attendees list
recipient.Resolve;
if(recipient.Resolved){mailItem.Display();}
else{alert('Unable to resolve this calendar: '+cal);}
}
番号3:
var outlookApp = new ActiveXObject("Outlook.Application");
var nameSpace = outlookApp.getNameSpace("MAPI");
mailFolder = nameSpace.getDefaultFolder(6);
mailItem = mailFolder.Items.add('IPM.Note.FormA');
mailItem.Subject="CUSTOMER SERVICE";
mailItem.To = document.frmM.txtEmail.value;
mailItem.HTMLBody =
それらはすべてかなり古い例からのものです。
また、選択した部屋にリンクされている会議テーブルからの情報も表示したいと考えています。どの部屋かの情報はありますが、会議テーブルへの接続がありません。また、Javascript で安全にデータベースに直接接続できないこともわかっています。
私は以前に Javascript でコーディングを行ったことがありません。そのため、ここでは少し不十分です。
これら2つの機能をどのように実行できるか知っている人はいますか? どんな助けにもとても感謝しています!