We are evaluating the Outlook plugin and it works pretty good except for the fact that it shows all the site contents when connecting to a site. We want users to give the ability to upload mails/attachments to a document library, but when they open the side bar, they see all the document libraries and also all the lists, tasks, links, workflow tasks, etc etc..
Is it possible to hide them? So that users only see document libraries? I think they will get confused seeing all those lists & task lists.
By default, harmon.ie includes lists/libraries with following templates IDs
GenericList = 100,
DocumentLibrary = 101,
Links = 103,
Announcements = 104,
Contacts = 105,
Tasks = 107,
PictureLibrary = 109,
TasksWithTimelineAndHierarchy = 171,
MySiteDocumentLibrary = 700,
IssueTracking = 1100
you can set the "ExcludedLibraryTemplates" key to exclude the template IDs of other list types as follows
[HKEY_CURRENT_USER\Software\Mainsoft\Prefs\ExcludedLibraryTemplates]
#="100,103,104,105,107,171,1100"
More details about available configuration options are found in https://harmon.ie/provision-harmonie-outlook-all-users
Related
I don't understand what they want from me and what he needs why he doesn't see this attribute, I don't know either
File "C:\Users\Антон\Desktop\бот дс\bot\main.py", line 26, in on_member_update
channel = client.get_channel(1064939728023080970) # notification channel
AttributeError: module 'http.client' has no attribute 'get_channel'
I tried to install the http module and http-client, but nothing helps
On the Microsoft Custom Vision documentation there is this Note: "...When you delete an iteration, you end up deleting any images that are uniquely associated with it."
But when I use the Python trainer.delete_iteration(project_id, iteration.id) my images that are uniquely associated with the last trained iteration are not deleted.
Do I need to do something else or this is not working?
The documentation may need to be updated. Looking at the source code for the delete_iteration method it looks like it just sends the DELETE request to the iteration URL:
delete_iteration.metadata = {'url': '/projects/{projectId}/iterations/{iterationId}'}
url = self.delete_iteration.metadata['url']
path_format_arguments = {
'projectId': self._serialize.url("project_id", project_id, 'str'),
'iterationId': self._serialize.url("iteration_id", iteration_id, 'str')
}
url = self._client.format_url(url, **path_format_arguments)
request = self._client.delete(url, query_parameters)
response = self._client.send(request, header_parameters, stream=False, **operation_config)
So, in order to delete the associated images, it looks like you would need to use the delete_images method as well.
Is there an easy way to discover and differentiate thermostat devicesIDs? I would have expected to be able to find the deviceId somewhere in the device interface or by using the Firebase library, but I haven't found either to be the case.
My Firebase object is created as such (url ending at thermostats):
Firebase fb = new Firebase("https://developer-api.nest.com/devices/thermostats/");
To change a property on the thermostat, my code looks like this...
/*This method does an http get (not firebase) to get the entire thermostats data structure as a JSON Object. It then iterates through each thermostat deviceId structure looking for a matching room name. When it finds a match, it breaks and returns the deviceID as a string. The device id is needed to change all data specific to that thermostat device using firebase. */
deviceId = getDeviceIdFromRoomName(roomName);
//I then perform an action like so to change the "target_temperature_f" to a new value.
fb.child(deviceId).child(NestConstants.TARGET_TEMP_F).setValue(newValue);
It seems like there should be an easier, more reliable way to do this using the Firebase library, but I haven't been able to find it. Any suggestions?
To help visualize, this is the data structure that I'm parsing and I'm looking for suggestions on a better way to acquire "CRfcK-QwEZLAr4qxHshPmZyFayBdIYv5" (if it exists).
{
"thermostats": {
"CRfcK-QwEZLAr4qxHshPmZyFayBdIYv5": {
"locale": "en-US",
"temperature_scale": "F",
"is_using_emergency_heat": false,
"has_fan": true,
"software_version": "4.1",
"has_leaf": true,
"device_id": "CRfcK-QwEZLAr4qxHshPmZyFayBdIYv5",
"name": "Master Bedroom",
"can_heat": true,
"can_cool": false,
"hvac_mode": "heat",
"target_temperature_c": 18.5,
"target_temperature_f": 66,
"target_temperature_high_c": 24,
"target_temperature_high_f": 75,
"target_temperature_low_c": 20,
"target_temperature_low_f": 68,
"ambient_temperature_c": 12,
"ambient_temperature_f": 54,
"away_temperature_high_c": 24,
"away_temperature_high_f": 76,
"away_temperature_low_c": 12.5,
"away_temperature_low_f": 55,
"structure_id": "xF7P6wyrR7-8VHerOAcHYDMBc_odGpO2CIpQO_g5EpM13LINO9Oxdg",
"fan_timer_active": false,
"name_long": "Master Bedroom Thermostat",
"is_online": true
}``
Disclaimer: I haven't worked with the NEST API. My answer below is based on experience with the regular Firebase API.
From the way it looks thermostats is a Firebase list. In that case you can easily handle all children using something like this:
var thermostats = new Firebase("https://developer-api.nest.com/devices/thermostats/");
thermostats .on('child_added', function(snapshot) {
var thermostat = snapshot.val();
alert(thermostat.device_id+' is '+thermostat.name);
});
I'm assuming you're using the JavaScript API here btw.
I'm not sure I'm understanding you correctly here, but have you tried calling the structure ID? When I do that, it lists all thermostats associated with that structure. Once you have all the thermostats, could you call them and store the associated name? If I'm way off, let me know and I'll try to look at it again.
Greg,
The structure contains a list of associated device ids. I suggest to start listening on structures if discoverability is your intent. You need to do that only once as the device ids don't change. Once you traverse structures and get your desired device ids you may never need to perform that step ever again.
Lev.
This comes down to simply saving to a specific location in asp.net.
Similar to using 'Save as...' in any standard program like Microsoft Word.
The GUI I'm looking for is exactly the same as the GUI for the FileUpload control in asp.net.
However, the FileUpload control only allows you to upload files to your running program.
All I want is to select a location to Save a file that is created within the program.
I've already written the following code:
protected void btnSaveYourBuild_Click(object sender, EventArgs e)
{
// Section A
System.Drawing.Image chosenGoldenLineTop = GetSystemDrawingImage(ImageGoldenLineTop);
System.Drawing.Image chosenGoldenLineBottom = GetSystemDrawingImage(ImageGoldenLineBottom);
System.Drawing.Image chosenImageTop = GetSystemDrawingImage(ImageTop);
System.Drawing.Image chosenImageJungle = GetSystemDrawingImage(ImageJungle);
System.Drawing.Image chosenImageMid = GetSystemDrawingImage(ImageMid);
System.Drawing.Image chosenImageAdc = GetSystemDrawingImage(ImageAdc);
System.Drawing.Image chosenImageSupp = GetSystemDrawingImage(ImageSupp);
// Section B
Bitmap B = new Bitmap(chosenGoldenLineBottom.Width, chosenGoldenLineBottom.Height + chosenImageSupp.Height + chosenGoldenLineTop.Height);
using (Graphics g = Graphics.FromImage(B))
{
g.DrawImage(chosenGoldenLineTop, 0, 0, 1540, 49);
g.DrawImage(chosenImageTop, 0, chosenGoldenLineTop.Height, 308, 560);
g.DrawImage(chosenImageJungle, chosenImageTop.Width, chosenGoldenLineTop.Height, 308, 560);
g.DrawImage(chosenImageMid, chosenImageTop.Width + chosenImageJungle.Width, chosenGoldenLineTop.Height, 308, 560);
g.DrawImage(chosenImageAdc, chosenImageTop.Width + chosenImageJungle.Width + chosenImageMid.Width, chosenGoldenLineTop.Height, 308, 560);
g.DrawImage(chosenImageSupp, chosenImageTop.Width + chosenImageJungle.Width + chosenImageMid.Width + chosenImageAdc.Width, chosenGoldenLineTop.Height, 308, 560);
g.DrawImage(chosenGoldenLineBottom, 0, chosenGoldenLineTop.Height + chosenImageTop.Height, 1540, 53);
}
// Section C
B.Save(System.IO.Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.Desktop),
"Team Awesome v3" + ".png"));
// Saves on the desktop
}
I've devided the big batch of code into 3 section for your ease, A, B and C.
Simply said:
Section A gets 7 images.
Section B combines the 7 images into 1 bigger image.
Section C saves the image to the desktop.
I'm very pleased with that already. But, I'm sure Users would like to be able to Select a specific location to save this 1 bigger image at, at least I would.
Now, the solution I'm trying to find is either a Control that can Save the 1 bigger image to a user chosen location, that could replace Section C.
OR
A Control that selects a specific location and is able to give back a Path to which I can save the 1 bigger image, replacing only a single argument of Section C.
I've tried an array of many different things, that turned out ineffective or failed at first attempt. Such as the FileDialog system (which is unavailable in asp.net), and the FileUpload Control, which only uploads a file to the programm and not the other way around.
Note how one could try to get a Path from the FileUpload control and try to create an illusion to the User that he's saving the file. But, one does not simply insert the FileName editing (before saving, like in any normal case) into the FileUpload control, neither can you actually select a Directory, you'd have to Select a File and cut off the FileName in the Path, resulting in a Confusing experience for the User.
I've spend around 17 hours trying to find a solution, but I've failed.
Could you help me?
User save are browser dependent , asp.net works in sandbox for security reasons cant change that. Maybe a plugin/add-on on browser can help you achieve functionality, but its still highly unlikely with solution you are trying.
with a browser add-in you can achieve it by let it listen to the web url and then give prompt to user to save file which will actually cut-paste the file saved in user system(say temp folder).
But again a browser addin will be needed to installed on user browser which is both optional for users and written differently for each browser.
regards
For a web application, I need to get a list or collection of all SalesOrders that meet the folowing criteria:
Have a WarehouseKey.ID equal to "test", "lucmo" or "Inno"
Have Lines that have a QuantityToBackorder greater than 0
Have Lines that have a RequestedShipDate greater than current day.
I've succesfully used these two methods to retrieve documents, but I can't figure out how return only the ones that meet above criteria.
http://msdn.microsoft.com/en-us/library/cc508527.aspx
http://msdn.microsoft.com/en-us/library/cc508537.aspx
Please help!
Short answer: your query isn't possible through the GP Web Services. Even your warehouse key isn't an accepted criteria for GetSalesOrderList. To do what you want, you'll need to drop to eConnect or direct table access. eConnect has come a long way in .Net if you use the Microsoft.Dynamics.GP.eConnect and Microsoft.Dynamics.GP.eConnect.Serialization libraries (which I highly recommend). Even in eConnect, you're stuck with querying based on the document header rather than line item values, though, so direct table access may be the only way you're going to make it work.
In eConnect, the key piece you'll need is generating a valid RQeConnectOutType. Note the "ForList = 1" part. That's important. Since I've done something similar, here's what it might start out as (you'd need to experiment with the capabilities of the WhereClause, I've never done more than a straightforward equal):
private RQeConnectOutType getRequest(string warehouseId)
{
eConnectOut outDoc = new eConnectOut()
{
DOCTYPE = "Sales_Transaction",
OUTPUTTYPE = 1,
FORLIST = 1,
INDEX1FROM = "A001",
INDEX1TO = "Z001",
WhereClause = string.Format("WarehouseId = '{0}'", warehouseId)
};
RQeConnectOutType outType = new RQeConnectOutType()
{
eConnectOut = outDoc
};
return outType;
}
If you have to drop to direct table access, I recommend going through one of the built-in views. In this case, it looks like ReqSOLineView has the fields you need (LOCNCODE for the warehouseIds, QTYBAOR for backordered quantity, and ReqShipDate for requested ship date). Pull the SOPNUMBE and use them in a call to GetSalesOrderByKey.
And yes, hybrid solutions kinda suck rocks, but I've found you really have to adapt if you're going to use GP Web Services for anything with any complexity to it. Personally, I isolate my libraries by access type and then use libraries specific to whatever process I'm using to coordinate them. So I have Integration.GPWebServices, Integration.eConnect, and Integration.Data libraries that I use practically everywhere and then my individual process libraries coordinate on top of those.