Display Distribution List As A Column In Outlook? - vba

A client of ours suddenly wants to add a custom column to his Outlook contact list. He wants this column to display the distribution list that said contact is a part of.
Now at a glance this is much more complicated than he makes it out to be. Not every contact is necessarily in AD, and they could certainly be part of more than one list. This all has to be accounted for in the formula.
I'm leaning towards telling him this is beyond our scope of support, but I though I'd ask around first. Is there some pre-made code out there that performs a similar function? Thanks.

You can certainly retrieve that information programmatically (ExchangeUser.GetMemberOfList), but you cannot display that in the Contacts folder view.
for each lst in Application.Session.CurrentUser.AddressEntry.GetExchangeUser.GetMemberOfList
Debug.Print lst.Name
next

Related

Is there a way to add a "no-readers" field to a Lotus Notes document?

In Lotus Notes/Domino, we have the functionality of Readers fields, which I know all about. These say who CAN see a document. I would like to know if there is some way (may be undocumented) where you can have that type of thing that says specifically who CANNOT see a certain document.
We have an application for HR, and some of the documents in there reflect negatively about certain people (complaints, for example) and everyone who has access to the database currently can see every document. I would like to hide this type of document from that specific person. I have not enacted any Readers fields on any documents in question.
It would be really nice to have a way to keep that current setup, but insert a factor of who to HIDE the document from like Readers fields do.
I know there are undocumented features people have learned about over the years, and wondered if anyone knows of such a thing that I can use.
Create a role called [ReadAll].
Create a Group called HR Readers and one called HR Restricted.
Add the people who can't read documents to the HR Restricted group. Add all others to HR Readers.
Add these two groups to the ACL and give the HR Readers group the [ReadAll] role.
Add a readers field that is computed to "[ReadAll]" on the documents you want to prevent the people in the "HR Restricted" group to not see.
No, there is no feature that does what you want. Not on a user-by-user basis. You can play with groups and roles, as suggested by Rob Mason, but those groups and roles have to be pre-determined. We asked for Non-Readers fields (at least) 20 years ago so that we could do what you want, but Iris, Lotus, IBM, and HCL never did it. I presume that either (a) it's hard, or (b) there isn't enough demand. Or both.
To hide content from specific people, you can use hide-when formulas within a form. I.e., the hide-when formula on one or more sensitive fields would be set to
#isMember(#UserName; RestrictedUsers)
where RestrictedUsers is a field that contains the list of people who cannot see the data in the fields.
But this is not real security. A user can see the document in views, and can see the hidden fields by bringing up the document properties dialog, or with a tool like NotesPeek. If you're talking about a Domino web app, and users don't have Notes clients and you have strictly-managed desktops so you are sure that is the case+, then it kind of sort of works. Admins and developers, though, would probably have the clients and would be able to see fields in documents that they're not supposed to.
I believe if I simply compute a Readers field to say something like:
whoToHideFrom:="John Smith/org";
#Name([ABBREVIATE];#Username) != whoToHideFrom
I will try this and mark this as successful or not successful after I test it

Outlook 2010 new assignment automatic setup

I have just started a new job where I receive a new assignment with a job name in the subject field of an email (amongst many other emails).
I would like to build a macro that automatically takes a specified string out of the subject text - creates a new inbox folder with that name - and then sets up a rule to move a copy of all future mail with that string into the named folder.
I am doing this at least 3 or 4 times a day and would like to make this task less repetitive.
The site is for programmers to help one another develop their programming skills. It is not a site where you can post a vague specification and hope someone will implement it for them. No one could implement your specification because too much is missing. You need to start by designing the system you seek which will identify all the information you will need for a specification.
Step 1: You need something to look at every incoming email and classify it as a task-email or not-a-task-email. Is this classification simple? Perhaps task-emails have a subject that starts with the word “Task”. Perhaps there is a phrase within the body of the email? Are task-emails totally consistent? Does a manager have a system for assigning tasks? Perhaps they are given a list of new tasks and a list of people who could action that task. They select a task and a person and the system creates the assignment email. With such a system, the emails will be totally consistent. But, if the emails are hand-crafted by the manager, they will be similar but not identical in format. Handling inconsistencies will make this a much more difficult task.
Step 2: Having identified an email as a new-task-email, the subject must be decoded to extract the task identifier. What is the format of that subject? Is it something simple like “Task xxxxxxx” where “xxxxxxx” is the identifier? Is the subject of a new assignment different from the subject of follow-up email?
Step 3: Your specification implies you can easily distinguish new and follow-up task-emails. I deduce this from the requirement to create a new folder for new task emails and to create a rule that moves any follow-up emails to that folder. I doubt creating a new rule for each task is a good idea. If you have at least 3 or 4 of these emails a day. That is 15 or 20 or more new rules per week. Rules that will have to be checked for every new email. I do not know how your business operates but this does not seem sensible to me. You want to create a new folder per task which seems sensible. Once you have finished a task, I assume you delete the task folder or, better, move it to an archive folder. Then you will have to go into the Rule manager, find the relevant rule and delete it. Will you do that manually or will you want another macro?
Step 4: How are you going to implement this? I think you are correct in thinking a rule is the right approach. Rules have lots of ways of selecting an email for processing and lots of possible actions they can perform on a selected email. However, there is a limit to the selection and action options. I am confident you will exceed those limits. One of the possible actions is to “run a script”. That is, pass the email to a macro that can do anything an Outlook VBA macro can do not just the things Microsoft thought would be useful for a rule.
Step 5: What is the scope of this macro? You have three types of email: new-task, follow-up-task and non-a-task email. Can you have one rule to identify new-task emails and another to identify follow-up-task emails? If you can, you will need a macro to create the folder. You might be able to move follow-up-task-emails with a rule or you might need another macro for that. If you cannot identify a task-email or a follow-up-task email, you will probably have to pass every email to the macro which will handle the classification and the auctioning of the task-emails.
The above is as much of the design as I can create at this stage. You need to finish the design and update your question. I cannot promise that anyone will help you create your macros but at least you will know what you have to investigate to write those macros yourself.

VSTS Restrict access to sensitive work items

Foreword: I've searched around on this question a fair bit and found answers which are close to a solution, but not what I'm looking for. So here I am, and I hope someone can help me. I'm relatively new to VSTS, so be gentle (or at least constructive) ;P
The Question: I'm looking for a way to restrict access to specific tickets (NOT by ticket type) that contain NDA protected data, whilst keeping them in the same backlog and iterations as the rest of the tickets related to a project.
We have many different NDA protected customers, so whilst creating a new ticket type per NDA, and restricting access to this, could work, it's not the solution I'm looking for.
Alternatively, I'm barking up the wrong tree, and there is an entirely different and "better way" to support this use-case?
Edit 1 - More info: Let's say I have 1 backlog for a product. It contains only 2 work items. It's important there is only 1 backlog for planning and overview by a product owner.
One of the two work items contains sensitive information only half the development team should have visibility to. How do I keep both tickets in the same backlog and iterations, but hide the sensitive one from some team members?
Thanks in advance for your time!
Regarding permission of work items in a team project, you can set the permission in area and iteration scope, but can’t for specific work items.
So, you need to put these work items in different area and manage permission for this area. Simple steps:
Go to team project admin page
Work=>Areas
Click New/New child, to create a new area.
Click …=>Security, set the permission for the group(s) or user(s)
Click the default team’s settings => Areas
Click + Select areas to add that area in order to show related work items (in that area)

How to delete all companies or contacts?

I'm using the free HubSpot CRM for now. I wrote some scraping code and through the API added over 17k companies and 4k contacts.
There were some errors due to an incomplete understanding of some of the API calls and now I'd like to wipe everything out and start over.
I realize I could run the "Get Recently Created Companies" and for each of the 20 it returns run the delete company API call, then loop it until no companies exist, however this seems like something I shouldn't have to write code to accomplish.
I checked the Academy but the examples showed an interface that didn't match what I see, so it's either outdated or meant for a different version of HubSpot than I have. Didn't find much on Google either.
Anyone else know of an easy solution for this?
HubSpot developer here. I just checked with the folks who run the Contacts and Companies APIs – the best option you have right now is to contact support.
I know that's not the answer you're looking for. We're working on improving things, but it's not there yet.
Ran into this issue myself, needing to delete 8k test the marketing team had generated when we were still playing around with features. Had to reach out to customer support a few times to get the answer as it's not at all intuitive.
On this help page they say that you can mass delete contacts by adding them to a list, using Select All, and then Delete. This doesn't work in cases such as mine though as the pagination only allows you to see up to 100 contacts at a time.
The secret step for now is that you have to go down to the bottom right corner and click on "View the old list manager" (black square button with two arrows that's just to the side of the Help button). In this view Select All really does select every contact in the list so that you can perform a batch delete (or other action) on them all at once.
Summary
Create new list with rules to add the Contacts you want to delete
Switch to the old list manager view (button on bottom right)
Select All
Delete
Tell the confirmation box that yes, you really know what you're doing
Hopefully HubSpot will update their help docs soon and re-add the ability to really select all list items in the new view before they completely remove the option to switch back the old view.

How to decide whether to split up a VB.Net application and, if so, how to split it up?

I have 2 1/2 years experience of VB.Net, mostly self taught, so please bear with me if I seem rather noobish still and do not know some of the basics. I would recommend you grab a cup of tea before starting on this, as it appears to have got quite long...
I currently have a rather large application (VB.Net website) of over 15000 lines of code at the last count. It does not do retail or anything particularly complex like that - it is literally just a wholesale viewing website with admin frontend, catalogue / catalogue management system and pageview system.
I don't really know much about how .Net applications work in the background - whether they are all loaded on the same thread or if each has its own thread... I just know how to code them, or at least like to think I do... :-)
Basically my application is set up as follows:
There are two different areas - the customer area and the administration frontend.
The main part of the customer frontend is the Catalogue. The MasterPage will load a list of products but that's all, and this is common to all the customer frontend pages.
I tend to work on only one or several parts of the application at a time before uploading the changes. So, for example, I may alter the hierarchy of the Catalogue and change the Catalogue page to match the hierarchy change whilst leaving everything else alone.
The pageview database is getting really quite large and so it is getting rather slow when the application is first requested due to the way it works.
The application timeout is set to 5 minutes - don't know how to change it, I have even tried asking this question on here and seem to remember the solution was quite complex and I was recommended not to change it, but if a customer requests the application 5 minutes after the last page view then it will reload the application from scratch. This means there is a very slow page load whenever it exceeds 5 minutes of inactivity.
I am not sure if this needs consideration to determine how best to split the application up, if at all, but each part of the catalogue system is set up as follows:
A Manager class at the top level, which is used by the admin frontend to add, edit and remove items of the specified type and the customer frontend to retrieve a list of items of the specified type. For example the "RangeManager" will contain a list of product "Ranges" and will be used to interact with these from the customer frontend.
An Item class, for example Range, which contains a list of Attributes. For example Name, Description, Visible, Created, CreatedBy and so on. The form for adding / editing loops through these to display relevant controls for the administrator. For example a Checkbox for BooleanAttribute.
An Attribute class, which can be of type StringAttribute, BooleanAttribute, IntegerAttribute and so on. There are also custom Attributes (not just datatypes) such as RangeAttribute, UserAttribute and so on. These are given a data field which is used to get a piece of data specific to the item it is contained in when it is first requested. Basically the Item is given a DataRow which is stored and accessed by Attributes only when they are first requested.
When one item is requested from a specific manager is requested, the manager will loop through all the items in the database and create a new instance of the item class. For example when a Range is requested from the RangeManager, the RangeManager will loop through all of the DataRows in the Ranges table and create a new instance of Range for each one. As stated above it simply creates a new instance with the DataRow, rather than loading all the data into it there and then. The Attributes themselves fetch the relevant data from the DataRow as and when they're first requested.
It just seems a tad stupid, in my mind, to recompile and upload the entire application every time I fix a minor bug or a spelling mistake for a word which is in the code behind (for example if I set the text of a Label dynamically). A fix / change to the Catalogue page, the way it is now, may mean a customer trying to view the Contact page, which is in no way related to the Catalogue page apart from by having the same MasterPage, cannot do so because the DLL is being uploaded.
Basically my question is, given my current situation, how would people suggest I change the architecture of the application by way of splitting it into multiple applications? I mean would it be just customer / admin, or customer / admin and pageviews, or some other way? Or not at all? Are there any other alternatives which I have not mentioned here? Could web services come in handy here? Like split the catalogue itself into a different application and just have the masterpage for all the other pages use a web service to get the names of the products to list on the left hand side? Am I just way WAY over-complicating things? Judging by the length of this question I probably am, and it wouldn't be the first time... I have tried to keep it short, but I always fail... :-)
Many thanks in advance, and sorry if I have just totally confused you!
Regards,
Richard
15000 LOC is not really all that big.
It sounds like you are not pre-compiling your site for publishing. You may want to read this: http://msdn.microsoft.com/en-us/library/1y1404zt(v=vs.80).aspx
Recompiling and uploading the application is the best way to do it. If all you are changing is your markup, that can be uploaded individually (e.g. changing some html layout in an aspx page).
I don't know what you mean here by application timeout, but if your app domain recycles every 5 minutes, then that doesn't seem right at all. You should look into this.
Also, if you find yourself working on various different parts of the site (i.e. many different changes), but need to deploy only some items in isolation, then you should look into how you are using your source control tools (you are using one, aren't you?). Look into something like GIT and branching/merging.
Start by reading:
Application Architecture Guide