2013-05-10 1 views
3

Можно ли добавить пункт меню в Quickbooks с помощью QBSDK?Добавить пункт меню в Quickbooks

Я нашел пару старых примеров, которые я не могу сделать.

Я создал собственное приложение для своей компании и пытаюсь упростить его, создав пункт меню в Quickbooks.

Любая помощь была бы принята с благодарностью.

Вот что я пробовал до сих пор, но я получаю сообщение об ошибке на subAdd.SubscriberID.SetValue (Me.appGUID.ToString).

Ошибка: * Неверный формат GUID. Необходимо использовать ноль для пользовательских полей или GUID, генерируемый GUIDGEN.EXE для частных расширений данных. *

{ 
    Dim subRq As ISubscriptionMsgSetRequest 
    subRq = MySessionManager.CreateSubscriptionMsgSetRequest(4, 0) 
    ' Add a UIExtension subscription to our request 
    Dim subAdd As IUIExtensionSubscriptionAdd 
    subAdd = subRq.AppendUIExtensionSubscriptionAddRq 

    ' 
    ' set up the subscription request with the required information, we're adding to 
    ' the file menu in this case, and just for fun, we're making it a cascading menu 
    subAdd.SubscriberID.SetValue(Me.appGUID.ToString) "<-----error happens here 
    subAdd.COMCallbackInfo.AppName.SetValue(Me.appName) 

    subAdd.COMCallbackInfo.ORProgCLSID.ProgID.SetValue("MenuEventContext.QBMenuListener") 
    subAdd.MenuExtensionSubscription.AddToMenu.SetValue("atmFile") 

    ' 
    ' For the cascade fun, we're just going to add items to the cascade menu... 
    Dim subMenu As IMenuItem 
    For i = 1 To 5 
     subMenu = subAdd.MenuExtensionSubscription.ORMenuSubmenu.Submenu.MenuItemList.Append 
     ' 
     ' this is the text that the user will see in QuickBooks: 
     subMenu.MenuText.SetValue("Sub Item " & i) 
     ' 
     ' this is the tag we'll get in our event handler to know which menu item was 
     ' selected: 
     subMenu.EventTag.SetValue("SubMenu" & i) 
    Next i 

    ' 
    ' Send the request and get the response, since we're sending only one request there 
    ' will be only one response in the response list 
    Dim subRs As ISubscriptionMsgSetResponse 
    subRs = MySessionManager.DoSubscriptionRequests(subRq) 
    Dim resp As IResponse 

    ' 
    ' Check the response and display an appropriate message to the user. 
    resp = subRs.ResponseList.GetAt(0) 
    If (resp.StatusCode = 0) Then 
     MsgBox("Successfully added to QuickBooks File menu, restart QuickBooks to see results") 
    Else 
     MsgBox("Could not add to QuickBooks menu: " & resp.StatusMessage) 
    End If 
    MySessionManager.CloseConnection() 
    MySessionManager = Nothing 
    Exit Sub 
    handleError: 
    MsgBox("Encountered error subscribing: " & Err.Description) 
    If Not MySessionManager Is Nothing Then 
     MySessionManager.CloseConnection() 
    End If 


End Sub 
+0

Нет это короткий ответ я боюсь ... –

+0

О, это не то, что я хотел услышать. –

ответ

3

Ответ да.

Единственная цель UIExtensionSubscription - добавить пункты меню в верхние меню. При нажатии на меню начнется ваше приложение, если оно еще не запущено, и передайте ему информацию о текущем окне Quickbooks.

Ваша заявка должна быть доступной и зарегистрированной.

Что касается вашего образца, убедитесь, что вы проходите {} вокруг своего GUID. Я не использую вызов функции unsure, если вам, возможно, понадобится перенести в строку сначала или нет.

В текущей загрузке QBPOSSDK из Intuit есть пример консольного приложения на C#. Я бы полностью прочитал руководство программистов и посмотрел на этот образец.

Один из моих рабочих запросов, довольно близко к образцу Intuit:

Private Shared Function GetUIExtensionSubscriptionAddXML(ByVal strMenuName As String, ByVal strMainMenuName As String) As String 
     'strMainMenuName would be "Company" for example 
     'Create the qbXML request 
     Dim requestXMLDoc As New XmlDocument() 
     requestXMLDoc.AppendChild(requestXMLDoc.CreateXmlDeclaration("1.0", Nothing, Nothing)) 
     requestXMLDoc.AppendChild(requestXMLDoc.CreateProcessingInstruction("qbxml", "version=""5.0""")) 
     Dim qbXML As XmlElement = requestXMLDoc.CreateElement("QBXML") 
     requestXMLDoc.AppendChild(qbXML) 

     'subscription Message request 
     Dim qbXMLMsgsRq As XmlElement = requestXMLDoc.CreateElement("QBXMLSubscriptionMsgsRq") 
     qbXML.AppendChild(qbXMLMsgsRq) 

     'UI Extension Subscription ADD request 
     Dim uiExtSubscriptionAddRq As XmlElement = requestXMLDoc.CreateElement("UIExtensionSubscriptionAddRq") 
     qbXMLMsgsRq.AppendChild(uiExtSubscriptionAddRq) 


     'UI Extension Subscription ADD 
     Dim uiExtEventSubscriptionAdd As XmlElement = requestXMLDoc.CreateElement("UIExtensionSubscriptionAdd") 
     uiExtSubscriptionAddRq.AppendChild(uiExtEventSubscriptionAdd) 

     'Add Subscription ID 
     uiExtEventSubscriptionAdd.AppendChild(requestXMLDoc.CreateElement("SubscriberID")).InnerText = MySubscriberGUID 

     'Add COM CallbackInfo 
     Dim comCallbackInfo As XmlElement = requestXMLDoc.CreateElement("COMCallbackInfo") 
     uiExtEventSubscriptionAdd.AppendChild(comCallbackInfo) 

     'Appname and CLSID 
     comCallbackInfo.AppendChild(requestXMLDoc.CreateElement("AppName")).InnerText = App_Name 
     comCallbackInfo.AppendChild(requestXMLDoc.CreateElement("CLSID")).InnerText = MyCLSID 


     ' MenuEventSubscription 
     Dim menuExtensionSubscription As XmlElement = requestXMLDoc.CreateElement("MenuExtensionSubscription") 
     uiExtEventSubscriptionAdd.AppendChild(menuExtensionSubscription) 

     'Add To menu 
     menuExtensionSubscription.AppendChild(requestXMLDoc.CreateElement("AddToMenu")).InnerText = strMainMenuName 

     Dim menuItem As XmlElement = requestXMLDoc.CreateElement("MenuItem") 
     menuExtensionSubscription.AppendChild(menuItem) 

     'Add Menu Name 
     menuItem.AppendChild(requestXMLDoc.CreateElement("MenuText")).InnerText = strMenuName 
     menuItem.AppendChild(requestXMLDoc.CreateElement("EventTag")).InnerText = "menu_" & strMenuName.Replace(" ", "_") 


     Dim displayCondition As XmlElement = requestXMLDoc.CreateElement("DisplayCondition") 
     menuItem.AppendChild(displayCondition) 

     displayCondition.AppendChild(requestXMLDoc.CreateElement("VisibleIf")).InnerText = "InventoryEnabled" 
     displayCondition.AppendChild(requestXMLDoc.CreateElement("EnabledIf")).InnerText = "InventoryEnabled" 

     Dim strRetString As String = requestXMLDoc.OuterXml 
     WriteLocalLog("GetUIExtensionSubscriptionAddXML: " & strRetString) 
     Return strRetString 
End Function 
+0

Привет, Comivan, у меня есть проблема, чтобы подписать меню под файл. Я подбираю ваш код, он работает, но он не отображает мое имя меню под файлом, но если я проверю Edit -> preferences -> Integrted Applications -> предпочтения компании там он показывает мое приложение. я совершил ошибку или что-то изменил .. Пожалуйста, помогите мне. Я пользуюсь версией QB2013 ... –

+0

Что-то, документация не распространяется (поскольку она старше, чем UAC). После вашего запроса на изменение меню вы должны запускать QuickBooks как администратор. Как только он будет изменен, вам больше не нужно будет запускать его. – Comivan