1

私は少し 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つの機能をどのように実行できるか知っている人はいますか? どんな助けにもとても感謝しています!

4

0 に答える 0