1

我正在做一些 Visio 实验,我想做的是在 SharePoint 中显示一个 Visio 文件,该 Visio 文件显示了建筑物的布局、会议室及其状态+使用 Outlook 预订它们的能力

会议室在 Outlook 中被标识为电子邮件地址,您可以向会议室发送电子邮件进行预订。

由于有很多房间,并且在将房间添加到会议邀请之前您看不到它们的可用性,因此我想在 Visio 中创建一个概览。

到目前为止我所拥有的:用 C# 编写的程序,它作为定时器服务运行,获取有关房间和会议的信息,并将其写入 SQL2008R2 数据库。

2张桌子:

房间: RoomEmail、RoomName、FloorNumber、容量、RoomStatus(现在)

会议: MeetingID、RoomEmail(FK)、MeetingTitle、MeetingStatus、MeetingStartTime、MeetingEndTime。

Visio 文件已添加到 SharePoint 并在那里工作,更新得很好。房间忙时显示为红色,空闲时显示为绿色,暂定时显示为黄色。

这对现在的状态有很大帮助,但我想要另外 2 个功能。

  • 能够单击 Visio 图表或另一个 WebPart 中某处的链接,并在“too”字段中打开带有新会议和房间的本地 Outlook 客户端
  • 能够查看所选房间的预定会议,查看何时可以在打开 Outlook 之前进行预订。

在我看到之后,当您在 Visio 中对形状进行数据连接时,不可能将形状链接到其他特定行(这就是我在 Room 表中添加 roomStatus 的原因)。到目前为止,我已经在 J​​avascript 中看到能够使用 Visio 形状执行逻辑。

我将此添加到内容 Webpart:

<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" />

此代码运行良好,当我单击一个房间时,它会显示在 Content Webpart 中。链接:http: //msdn.microsoft.com/en-us/library/gg243427.aspx

所以我查看了一些能够从 Javascript 打开 Outlook 的网站:

操作,不能发布更多链接,这是代码:

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 

NR2:

//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);}
}

NR3:

  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 中做过任何编码,这就是为什么我在这里有点不足。

有谁知道我怎么能做到这两个功能?我非常感谢任何帮助!

4

0 回答 0